Symfony 2中的Equal Fields验证

时间:2012-01-31 12:47:27

标签: php symfony

我正在尝试在Symfony 2项目中实现更改密码功能。 我在User文件中有实体validation.yml和验证规则。在User实体中,我的字段为“password”,其验证限制在validation.yml 我创建了包含2个字段“password”和“confirmPasswod”的表单。我想对“密码”字段使用我的实体验证约束,并检查“passwod”和“confirmPassword”字段之间的相等性。在我的控制者中,我写了

$form = $this->createForm(new SymfonyForm\ChangePasswordType(), new Entity\User());
if ($form->isValid())
    {..............}

在“用户”实体中,我没有“confirmPasswod”字段。所以我得到错误:

Neither property "confirmPassword" nor method "getConfirmPassword()" nor method "isConfirmPassword()" exists in class

有没有办法对某些表单字段使用基于实体的表单验证,而不为其他表单字段使用基于实体的验证? 提前谢谢。

1 个答案:

答案 0 :(得分:16)

SymfonyForm\ChangePasswordType中,您可以使用以下内容:

$builder->add('password', 'repeated', array(
    'type' => 'password',
    'first_name' => 'Password',
    'second_name' => 'Password confirmation',
    'invalid_message' => 'Passwords are not the same',
));

从Symfony 2.1开始,您可以配置选项以避免元素名称损坏(如评论中所述)

$builder->add('password', 'repeated', array(
    // … the same as before 
    'first_name' => 'passwd',
    'second_name' => 'passwd_confirm',
    // new since 2.1
    'first_options'  => array('label' => 'Password'),
    'second_options' => array('label' => 'Password confirmation'),    
));