Symfony2 - 验证其他表单元素

时间:2013-06-21 13:04:56

标签: symfony logic constraints

如何验证我的实体中不存在且甚至与它们无关的其他表单字段?

例如:用户需要接受规则,以便我可以添加一个附加复选框,并将映射设置为false,但是如何添加一个验证此字段的约束?

甚至更高级:用户需要在表单中正确重复他的电子邮件和密码。我如何验证它们是否相同?

我想避免在我的实体中添加这些字段,因为它没有任何关联。

我使用Symfony 2.3。

1 个答案:

答案 0 :(得分:2)

一种方法是直接在表单元素上挂起约束。例如:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $notBlank = new NotBlank();

    $builder->add('personFirstName', 'text', array('label' => 'AYSO First Name', 'constraints' => $notBlank));
    $builder->add('personLastName',  'text', array('label' => 'AYSO Last Name',  'constraints' => $notBlank));

对于重复的内容,请查看重复的元素:http://symfony.com/doc/current/reference/forms/types/repeated.html

验证的另一种方法是为您的实体创建包装器对象。包装器对象将包含其他不相关的属性。然后,您可以在validation.yml中设置约束,而不是直接在表单上设置约束。

最后,您可以为一个属性构建表单类型并向其添加约束:

class EmailFormType extends AbstractType
{
public function getParent() { return 'text'; }
public function getName()   { return 'cerad_person_email'; }

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'label'           => 'Email',
        'attr'            => array('size' => 30),
        'required'        => true,
        'constraints'     => array(
            new Email(array('message' => 'Invalid Email')), 
        )
    ));
}
}