我需要在运行时更改Symfony中范围验证器的最大值,同时使用FormBuilder构建表单。有人知道怎么做吗?
答案 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(...));
}
}
);
希望这是有帮助的