2015-07-20 44 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));