我将FOSUB与Symfony 3.2一起使用 我想在用户登录时“规范化”用户名。 通过“规范化”,我的意思是我有一个“NormalizeService”,如果用户存在,则在检查数据库之前称为。 这个过程将是:
$normalizedUsername = $NormalizeService->normalize($providedUsername);
logUser($normalizedUsername, $providedPassword); // this is a simple login as usual
您认为最好的方法是什么?创建custom UserProvider?我不确定这是我需要的。
此致
答案 0 :(得分:1)
就像FOSUserBundle的documentation所说:
FOSUserBundle存储用户名和电子邮件的规范化版本,这些版本在查询和检查唯一性时使用。
您只需要创建一个实现CanonicalizerInterface
的类namespace AppBundle\Util;
use FOS\UserBundle\Util\CanonicalizerInterface;
class MyCanonicalizer implements CanonicalizerInterface
{
private $normalizeService;
public function __construct(NormalizeService $normalizeService)
{
$this->normalizeService = $normalizeService;
}
public function canonicalize($string)
{
if (null === $string) {
return null;
}
return $this->normalizeService->normalize($string);
}
}
将其注册为服务:
# app/config/services.yml
services:
app.my_canonicalizer:
class: AppBundle\Util\MyCanonicalizer
arguments: ['@normalize_service'] # your NormalizeService
public: false
然后配置FOSUserBundle使用它:
# app/config/config.yml
fos_user:
service:
email_canonicalizer: app.my_canonicalizer
答案 1 :(得分:0)
您可以创建一个PRE_SUBMIT FormEvent,在其中规范化用户名。
有关详细信息,请参阅this。