使用ajax表单将消息转换为登录

使用ajax表单将消息转换为登录,ajax,symfony,fosuserbundle,Ajax,Symfony,Fosuserbundle,我使用的是symfony3.2,我想用ajax表单登录。除了没有翻译的消息外,一切正常 这是AjaxAuthenticationFailureHandler类 class AjaxAuthenticationFailureHandler extends DefaultAuthenticationFailureHandler { /** * @var mixed */ private $translator; /** * @param \Symfony\Component\HttpKern

我使用的是symfony3.2,我想用ajax表单登录。除了没有翻译的消息外,一切正常

这是AjaxAuthenticationFailureHandler类

class AjaxAuthenticationFailureHandler extends DefaultAuthenticationFailureHandler
{
/**
 * @var mixed
 */
private $translator;

/**
 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $httpKernel
 * @param \Symfony\Component\Security\Http\HttpUtils        $httpUtils
 * @param array                                             $options
 * @param \Psr\Log\LoggerInterface                          $logger
 * @param mixed                                             $translator
 */
public function __construct(HttpKernelInterface $httpKernel, HttpUtils $httpUtils, array $options, LoggerInterface $logger = null, $translator = null)
{
    parent::__construct($httpKernel, $httpUtils, $options, $logger);

    $this->translator = $translator;
}

/**
* {@inheritDoc}
*/
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    if ($request->isXmlHttpRequest()) {
        return new Response(json_encode(array(
            'has_error' => true,
            'message'     => $this->translator->trans($exception->getMessage())
        )));
    }

    return parent::onAuthenticationFailure($request, $exception);
}
symfony 4的解决方案:

对于symfony 4,我们可以这样做:

'message' => $this->translator->trans($exception->getMessageKey(), array(), 'security'),

尝试将您的翻译行更改为:

$this->translator->trans($exception->getMessage(), array(), 'messages')
然后在资源/翻译文件夹中为每种语言创建翻译文件,如messages.en.yml、messages.fr.yml等

您的$exception->getMessage()应该尝试返回翻译键以简化操作,例如,它应该返回“error.name.missing”,然后在yml翻译文件中,您应该:

error.name.missing: 'The name cannot be missing'