是否可以將完整的表單作爲上下文傳遞給驗證器?使用Fieldset或Collection時的ZF2驗證器上下文
我想創建用於在字段集A元素X條件驗證器,其檢查在不同的字段集B.元件Y的值
的問題是,所述的isValid功能僅接收用於字段集的上下文中是這個元素X對元素Y一無所知。
所有答案大大收到!
是否可以將完整的表單作爲上下文傳遞給驗證器?使用Fieldset或Collection時的ZF2驗證器上下文
我想創建用於在字段集A元素X條件驗證器,其檢查在不同的字段集B.元件Y的值
的問題是,所述的isValid功能僅接收用於字段集的上下文中是這個元素X對元素Y一無所知。
所有答案大大收到!
你可以使用集合和ZendCollectionInputFilter是的。
這裏沒有像本文檔的負荷,知道了Zend傢伙了,雖然排序此(認爲唯一一提的是在http://framework.zend.com/apidoc/2.2/classes/Zend.InputFilter.CollectionInputFilter.html),但現在的資源,真正幫助我是這樣的:
http://www.aronkerr.com/2013/11/zf2-form-collection-validation-unique.html
很聰明的東西,一旦你把你的頭圍繞這些。由於您的問題並不具體,您的表單,代碼字段和輸入過濾器沒有任何代碼,您現在已經使用過,但希望這有助於您。如果您在任何時候遇到困難,都樂於運行更具體的代碼
假設我們的字段集A和B屬於Sample
的形式。我們需要從這個父窗體,以訪問這種形式的情況下添加驗證驗證任何孩子的fieldsets時:
<?php
namespace App\Form;
use Zend\Form\Form;
use Zend\InputFilter\InputFilterProviderInterface;
class Sample extends Form InputFilterProviderInterface
{
public function init()
{
$this->add([
'type' => 'App:Fieldset:A',
'name' => 'fieldsetA',
]);
$this->add([
'type' => 'App:Fieldset:B',
'name' => 'fieldsetB',
]);
$this->add([
'type' => 'submit',
'name' => 'submit',
'attributes' => [
'value' => 'Submit',
],
]);
}
public function getInputFilterSpecification()
{
return [
'fieldsetA' => [
'type' => 'InputFilter',
'X' => [
'required' => true,
'allow_empty' => true,
'continue_if_empty' => true,
'validators' => [
[
'name' => 'Callback',
'options' => [
'callback' => function ($value)
{
if ($this->data['fieldsetB']['Y'])
{
// do something
}
// do something else
},
],
],
],
],
],
];
}
}
注意如何我們在一個從內Sample
使用InputFilter
類型添加驗證器X。接下來我們直接訪問$this->data
並遍歷它以得到Y中的Y.
謝謝@Jon - 該指南正是我所需要的 –