Zf2 Callback Validator未传递所有表单值

时间:2014-08-01 09:10:49

标签: php validation zend-framework2 zend-validate zend-form2

目前使用ZF2设置表单。我希望能够基于比较表单上2个不同元素的值来设置表单的验证。在过去,我使用Callback验证器传递所有表单值,在我当前的场景中,我只能得到要验证的元素的值。

以下是我设置表单的方式

    public function __construct(Di $di)
{
    $this->setDi($di);
    parent::__construct();

    $inputFilter = $this->getInputFilter();

    $this->addElement(
        DateSelect::class,
        [
            'label' => 'Purchase Date'
        ], [
            'name' => 'purchase_date',
            'required' => 'true'
    ]);

    $this->addElement(
        Select::class,
        [
            'label' => 'What card type did you use to make the purchase',
            'value_options' => [
                    '' => '',
                    'credit' => 'Credit',
                    'debit' => 'Debit'
            ]
        ],[
            'required' => true,
            'name' => 'card_type',
            'helpText' => 'card type'
    ]);

    $this->addElement(Submit::class, [],['value' => 'Claim']);

    $inputFilter->add([
            'name' => 'card_type',
            'validators' => array(
                array(
                    'name' => Callback::class,
                    'options' => array(
                        'messages' => array(
                            Callback::INVALID_VALUE => 'Item must have been purchased in the last 6 years in order to claim',
                        ),
                        'callback' => function($value, $context = []) {
                                var_dump(func_get_args());

                                //I need to be able to get both card_type and purchase_date inputs here
                                die();
                            },
                    )
                )
            )
        ]);

}

问题是目前var_dump(func_get_args())目前只返回:

array(2) { [0]=> string(6) "credit" [1]=> array(1) { ["card_type"]=> string(6) "credit" } }

在过去,我原本期望这也会传递purchase_date值作为回调的第二个参数的一部分。

之前有没有人遇到过这个问题?我正在我的应用程序的其他方面使用回调函数,但似乎无法让它在这里工作。

提前致谢

为了澄清(尽管我认为它不会对验证产生任何影响),但函数$this->addElement是我自己的函数,保存在特征上,只是:

public function addElement($class, $options, $attributes)
{
    $this->add(
        $this->getDi()->newInstance($class, ['options' => $options])->setAttributes($attributes)
    );
}

1 个答案:

答案 0 :(得分:0)

事实证明,回调只会传递输入过滤器知道的其他值。

解决方法是:

$filter->add(['name' => 'card_type', 'required' => true]);