Zend framework2 使用字段集或集合时的ZF2验证程序上下文
是否可以将完整表单作为上下文传递给验证器 我想为字段集a中的元素X创建一个条件验证器,它检查不同字段集B中元素Y的值 问题是isValid函数只接收它所在的字段集的上下文。这个元素X对元素Y一无所知Zend framework2 使用字段集或集合时的ZF2验证程序上下文,zend-framework2,zend-form,zend-validate,Zend Framework2,Zend Form,Zend Validate,是否可以将完整表单作为上下文传递给验证器 我想为字段集a中的元素X创建一个条件验证器,它检查不同字段集B中元素Y的值 问题是isValid函数只接收它所在的字段集的上下文。这个元素X对元素Y一无所知 所有答案都收到了 您可以使用collections和ZendCollectionInputFilter来实现这一点 这方面没有太多的文档,我知道zend的人正在整理这方面的内容(想一想唯一提到它的是在中),但是现在一个真正帮助我的资源是: 一旦你了解了这些,你就会发现这些东西非常聪明。由于您的问题
所有答案都收到了 您可以使用collections和ZendCollectionInputFilter来实现这一点 这方面没有太多的文档,我知道zend的人正在整理这方面的内容(想一想唯一提到它的是在中),但是现在一个真正帮助我的资源是:
一旦你了解了这些,你就会发现这些东西非常聪明。由于您的问题不是非常具体,并且没有您目前已经实现的表单、字段集和输入过滤器的代码,因此无法真正为您提供更多帮助,但希望这能有所帮助。如果您在任何时候都非常乐意运行更具体的代码,那么假设我们的字段集A和B属于表单
示例。为了在验证任何子字段集时访问此表单的上下文,我们需要从父表单添加验证程序:
<?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
},
],
],
],
],
],
];
}
}
谢谢@Jon-那本指南正是我要找的