FOSUserBundle如何在登录时规范化UserName?

时间:2017-04-13 10:30:48

标签: symfony fosuserbundle

我将FOSUB与Symfony 3.2一起使用 我想在用户登录时“规范化”用户名。 通过“规范化”,我的意思是我有一个“NormalizeService”,如果用户存在,则在检查数据库之前称为。 这个过程将是:

$normalizedUsername = $NormalizeService->normalize($providedUsername);
logUser($normalizedUsername, $providedPassword); // this is a simple login as usual

您认为最好的方法是什么?创建custom UserProvider?我不确定这是我需要的。

此致

2 个答案:

答案 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