PHP-Symfony 2表单级联验证

我在symfony 2中有一个表单,例如:

$form = $this->createFormBuilder();

        $form
            ->add('subscription', 'entity', array(
                'class' => 'AcmeDemoBundle:Subscription',

                'property'              => 'name',
                'label'                 => 'Subscription',
                'cascade_validation'    => false,
                'constraints'           => array(
                    new NotBlank(),
                )
            ))

验证失败,并显示以下错误:

subscription: ERROR: This value should be of type integer. ERROR: This value should be of type integer.

问题是我不想将验证层叠到订阅实体.我只希望能够从下拉列表中选择实体.

任何想法?

解决方法:

之所以收到这些错误消息,是因为您在子实体的一个或多个属性上的类型验证失败.无论您在何处定义这些约束,都应进行检查.就我而言,当我为允许为NULL的属性分配“ Type()”约束时,就会触发此错误.删除类型约束消除了错误.

关于子对象的验证,仅当您根据我对文档的阅读情况,在父类中的属性上分配“有效”约束时,才应该发生这种情况.但是,它似乎也由相关的AbstractType表单类型类的setDefaultOptions()方法中定义的级联_验证字段控制,您也可以在实例化表单对象时通过$options数组将其传递来覆盖它:

$form = $this->createForm(
    $formType,
    $formModel,
    array('cascade_validation' => false)
);

在您的情况下,您定义的cascade_validation设置仅适用于表单对象的Subscription子代的属性,我认为您正在尝试将验证设置应用于类本身(具有Subscription对象的类为其属性之一).因此,将表单生成器实例更改为此:

$form = $this->createFormBuilder(null, array('cascade_validation' => false));

或者,您可以按照symfony2文档中的说明,在控制器内显式定义要验证的字段,如下所示:

use Symfony\Component\Validator\Constraints\Email;

public function addEmailAction($email)
{
    $emailConstraint = new Email();
    // all constraint "options" can be set this way
    $emailConstraint->message = 'Invalid email address';

    // use the validator to validate the value
    $errorList = $this->get('validator')->validateValue(
        $email,
        $emailConstraint
    );

    if (count($errorList) == 0) {
        // this IS a valid email address, do something
    } else {
        // this is *not* a valid email address
        $errorMessage = $errorList[0]->getMessage();

        // ... do something with the error
    }

    // ...
}

Reference documentation on symfony2 validation

上一篇:如何在PHP MYSQL中验证字符串?


下一篇:php-需要一个字段单独的条件验证器