2015-07-20 112 views
0

我试图添加一个动态验证程序到一个集合,但我试过的一切都没有奏效。ZF2动态收集验证程序

如果我有 - 我们说 - 集合中的3个字段集,我只希望第二个字段集(名称为“1”)具有必需的字段。

$input_filter = new Filter\Edit(); 
$collection_input_filter = new CollectionInputFilter(); 

$orderDetailFilter = new Filter\OrderDetail($serviceManager); 
$collection_input_filter->setInputFilter($orderDetailFilter); 

$input_filter->add($collection_input_filter, 'details'); 

$this->setInputFilter($input_filter) 
    ->setHydrator(new DoctrineHydrator($entityManager)) 
    ->setObject(new Order()); 
+0

不,我不认为你可以做到这一点。由于fieldsets的输入过滤器是相同的实例。 – Pradeep

+0

我可以在表单绑定实体对象之后迭代字段集,并且在验证表单之前,我可以为每个验证组设置或添加新的验证器,但不考虑。如果你有一对多的表单,这不是一个好的想法,在许多部分对象可以有不同的要求 – user3143015

+0

尝试打印每个字段集的输入过滤器的对象ID。它会打印相同的对象ID,所以如果你附加不同的校验器,它会一次又一次地修改同一个对象,所以它不会生效。 – Pradeep

回答

0

检查: http://www.aronkerr.com/2013/11/zf2-form-collection-validation-unique.html 他在一个字段集合中的元素添加唯一的值。他扩展了InputCollectionFilter。 您可以以相同的方式进行自定义密钥验证。

您必须从CollectionInputFilter扩展isValid方法。 编写您自己的CollectionInputFilter并从Zend \ InputFilter \ CollectionInputFilter扩展它。用setter方法

protected validateFieldsetKeys = array() 

为例 :

添加你自己的财产。

当you're加入您的CollectionInputfilter(在你的工厂或控制器),只需拨打自己并添加fieldsetkeys这样的:

$collection_input_filter = new CollectionInputFilter(); 
$collection_input_filter->setValidateFieldsetKeys(array(2,3));