Php 如何在Symfony2中设置密码长度限制?

Php 如何在Symfony2中设置密码长度限制?,php,symfony,Php,Symfony,我试过使用@Assert\MinLength,但似乎在对密码进行编码后,当密码在每个案例中都足够长时,它会进行检查。如何在编码之前放置约束 我想不出比在绑定注册表后用strlen统计符号数更好的方法了,但我认为这不是一个好方法。而且我也不确定这是否会起作用,我也不确定编码是什么时候完成的 如有任何建议,将不胜感激!提前谢谢你 您不应该在密码设置器中自己对密码进行编码。而不是使用一些编码器(您甚至可以编写自己的编码器),并在表单验证后对密码进行编码 以下是如何使用编码器的示例: 问题在于,您使用一

我试过使用
@Assert\MinLength
,但似乎在对密码进行编码后,当密码在每个案例中都足够长时,它会进行检查。如何在编码之前放置约束

我想不出比在绑定注册表后用strlen统计符号数更好的方法了,但我认为这不是一个好方法。而且我也不确定这是否会起作用,我也不确定编码是什么时候完成的


如有任何建议,将不胜感激!提前谢谢你

您不应该在密码设置器中自己对密码进行编码。而不是使用一些编码器(您甚至可以编写自己的编码器),并在表单验证后对密码进行编码

以下是如何使用编码器的示例:


问题在于,您使用一个字段有两个目的:以明文和编码形式存储密码。您需要的是每个用途的字段:

使用Symfony\Component\Validator\Constraints\NotBlank;
使用Symfony\Component\Validator\Constraints\MinLength;
使用条令\ORM\Mapping\Column;
类用户
{
/**
*@NotBlank
*@MinLength(6)
*
*@var字符串
*/
私人密码;
/**
*@列
*
*@var字符串
*/
私人$password;
}
只有
$password
字段会持久保存到数据库中,并且不会在表单中显示,因此用户无法对其进行编辑

此外,您还需要一个条令事件侦听器或其他一些代码,用于检查
$plainPassword
是否为空,如果不是空,则对其值进行编码并将其放入
$password


使用
security.encoder\u factory
服务获取您在安全配置中设置的编码器,并使用它对密码进行编码。另外,请检查my。

这可能是因为您在调用isValid()方法之前对密码进行了编码。你在哪里对密码进行编码?我用一种方法对它进行编码:
public function setPassword($password){$this->password=sha1($password);}
它在我的用户类中。谢谢!我知道
$this->password=sha1($password)
是一种不好的做法,但它只是针对所有安全系统的练习,我也遇到了问题,所以我不想让它太复杂。