2013-02-02 1 views
1

Я бы хотел перевести в мои сообщения об ошибках входа в систему ajax. Я использую FOSUserBundle, и я бы воспользовался файлами перевода, которые я правильно перезаписал папку Resources/translations.Symfony2 Войти ajax translate error message

Мои AthenticationHandler.php:

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
     AuthenticationFailureHandlerInterface 
{ 

protected $router; 
protected $security; 
protected $userManager; 
protected $service_container; 

public function __construct(RouterInterface $router,SecurityContext $security, $userManager, $service_container) 
{ 
    $this->router = $router; 
    $this->security = $security; 
    $this->userManager = $userManager; 
    $this->service_container = $service_container; 

} 
public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 
    if ($request->isXmlHttpRequest()) { 
     //... 
    } 
    return new RedirectResponse($this->router->generate('anag_new')); 
} 
public function onAuthenticationFailure(Request $request, AuthenticationException $exception) { 

    if ($request->isXmlHttpRequest()) { 
     $error = $exception->getMessage(); 
     $result = array('success' => false, 'message' => $request->get('translator')->trans($error, array(), 'FOSUserBundle')); 
     $response = new Response(json_encode($result)); 
     $response->headers->set('Content-Type', 'application/json'); 
     return $response; 
    } else { 
     //... 
    } 
} 

}

Но вернуть эту ошибку:

Fatal error: Call to a member function trans() on a non-object in /var/www/MyBusiness/src/My/UserBundle/Handler/AuthenticationHandler.php 

Как перевести сообщения об ошибках?

ответ

2

$request->get(string $key, mixed $default = null, type $deep = false) предназначен для получения параметров от GET, PATH, POST, COOKIE. Вы пытаетесь получить параметр «переводчик», который, вероятно, не существует. Так возвращается null, и вы вызываете trans() на не-объект.

Просто введите «переводчик» в свой AuthenticationHandler (возможно, в конструктор). Или получить его из сервисного контейнера, поскольку он доступен в вашем классе:

$translator = $this->service_container->get('translator'); 

// ... 
$result = array(
    'success' => false, 
    'message' => $translator->trans($error, array(), 'FOSUserBundle') 
); 
+0

Действительно большое вам спасибо! Прекрасно! – Lughino