在FOSUserBundle中登录后的自定义错误消息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在FOSUserBundle中登录后的自定义错误消息相关的知识,希望对你有一定的参考价值。
我正在使用FOSUserBundle和Symfony 3.4登录我的用户。当他们输入错误的密码时,会显示以下消息:
我想添加对用户类型的检查并添加自定义错误消息,例如:“您必须是客户才能登录。”。
我实现了一个用户检查程序,以完成此任务,但它没有按预期工作:
class CustomerUserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user)
{
// nothing to do here
return;
}
public function checkPostAuth(UserInterface $user)
{
if (!$user instanceof CustomerUser) {
throw new AuthenticationException('You must be a customer in order to login');
}
return;
}
}
我收到此错误:
如何在文本中添加新错误?谢谢。
答案
我能够使用自定义异常实现我的目标:
<?php
namespace AppBundleSecurity;
use SymfonyComponentSecurityCoreExceptionAccountStatusException;
class CustomerUserException extends AccountStatusException
{
/**
* {@inheritdoc}
*/
public function getMessageKey()
{
return 'You must be a customer in order to login.';
}
}
用户检查器现在是这样的:
<?php
namespace AppBundleSecurity;
use ApplicationSonataUserBundleEntityCustomerUser;
use ApplicationSonataUserBundleEntityUser;
use SymfonyComponentSecurityCoreUserUserCheckerInterface;
use SymfonyComponentSecurityCoreUserUserInterface;
class CustomerUserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user)
{
// nothing to do here
return;
}
public function checkPostAuth(UserInterface $user)
{
if (!$user instanceof User) {
return;
}
if (!$user instanceof CustomerUser) {
throw new CustomerUserException();
}
}
}
[可选]我在app/Resources/translations/security.en.xlf
中创建了一个新的翻译文件:
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="You must be a customer in order to login.">
<source>You must be a customer in order to login.</source>
<target>You must be a customer in order to login.</target>
</trans-unit>
</body>
</file>
</xliff>
并正确显示消息:
另一答案
另一种方法是通过将validators.en.yml
从...vendor/friendsofsymfony/user-bundle/Resources/translations
复制到...app/Resources/translations
来覆盖qazxswpoi。在那里做任何想要的改变。
以上是关于在FOSUserBundle中登录后的自定义错误消息的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2:如何实现自定义用户登录和注册——摆脱 FOSUSerBundle