在运行时更改Symfony2范围验证器的最小值/最大值

时间:2013-12-02 15:03:46

标签: symfony range validation

我需要在运行时更改Symfony中范围验证器的最大值,同时使用FormBuilder构建表单。有人知道怎么做吗?

2 个答案:

答案 0 :(得分:3)

嗯,Symfony的设计是为了将约束附加到底层对象/数据,而不是形式(类型)本身。

但是,如果表单未映射到类,可以直接向表单添加约束。

http://symfony.com/doc/current/book/forms.html#adding-validation

基本上,您可以在表单构建器中定义一个constraints选项,该选项应该是一个约束对象数组。

使用Symfony \ Component \ Validator \ Constraints \ Range;

$builder->add('your_field', null, array(
    new Assert\Range(array(
        'min'        => 10
      , 'max'        => $someDyanmicValue
      , 'minMessage' => 'min error message'
      , 'maxMessage' => 'max error message'
    ))
));

如果您的表单 映射到定义了Range约束的类,则您必须以不同的方式进行此操作。让我知道。

答案 1 :(得分:1)

正如我之前在评论中写的那样,我使用了这样的解决方案:

first part of the range:

class Entity {
 //@Assert\NotBlank()
 private $property;
}

second part of the range:

$formBuilder->get('property')->addEventListener(FormEvents::POST_SUBMIT,
    function(FormEvent $event) use ($something) {
        $property = $event->getForm()->getData();
        if ($property > $something) {
            $event->getForm()->addError(new FormError(...));
        }
    }
);

希望这是有帮助的