如何验证使用用户管理器创建的用户的密码?

时间:2017-12-06 19:45:03

标签: php symfony validation fosuserbundle symfony-3.4

我想知道如何根据spec :: Spec spec = describe "newPersistentEntity function" $ it "returns a new Entity with a generated id and the specified name" $ do x <- newPersistentEntity "myName" pure $! id x -- Force evaluation of the `id` field to ensure that -- the database actually did return a string here name x `shouldBe` "myName" 中定义的验证规则检查任意密码。我创建了一个管理页面,管理员用户可以创建其他管理员用户。我想使用匿名用户在validation.xml页面注册自己帐户时使用的相同规则来验证这些用户。从我所看到的,这些规则在/register中定义。

所以基本上我想做这样的事情:

validation.xml

甚至可以直接调用密码上的函数:

$userManager = $container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setPlainPassword('1');
$arrayOfErrors = functionThatValidatesUserPassword($user);

我应该使用什么来替换$arrayOfErrors = functionThatValidatesUserPassword('1');

我认为验证器服务可能有效,但是当我尝试

functionThatValidatesUserPassword

我只是得到一个空的错误列表。我期待看到一个错误,说“密码太短”,如果您在$validator = $this->get('validator'); $errors = $validator->validate($user); print_r($errors);exit; 页面上注册了具有相同密码的帐户,则会收到该错误。

我在Symfony 3.4和FosUserBundle 2.0上。

在搜索我的问题的答案时,我发现以下两篇帖子描述了如何覆盖/register文件中定义的规则。

我计划覆盖验证规则,但是现在我只想使用FosUserBundle附带的内置规则来验证我的密码。

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。 FOSUserBundle的内置validation.xml中的约束属于validation groups。默认情况下,validate函数仅验证不属于任何组的约束。 validate函数有第三个参数,它接受包含要检查的约束的组数组。所以你要做的就是传入包含你想要检查的约束的组。例如,密码字段属于以下组:Registration,Profile,ResetPassword,ChangePassword。我使用了注册组,因此我的代码如下所示:

$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setPlainPassword('1');
$validator = $this->get('validator', null, array("Registration"));
$errors = $validator->validate($user);