Zend framework2 使用字段集或集合时的ZF2验证程序上下文

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的人正在整理这方面的内容(想一想唯一提到它的是在中),但是现在一个真正帮助我的资源是: 一旦你了解了这些,你就会发现这些东西非常聪明。由于您的问题

是否可以将完整表单作为上下文传递给验证器

我想为字段集a中的元素X创建一个条件验证器,它检查不同字段集B中元素Y的值

问题是isValid函数只接收它所在的字段集的上下文。这个元素X对元素Y一无所知


所有答案都收到了

您可以使用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-那本指南正是我要找的