0

現在、ZF2 を使用してフォームをセットアップしています。フォーム上の 2 つの異なる要素の値を比較することに基づいて、フォームの検証をセットアップできるようにしたいと考えています。過去にコールバックバリデーターを使用してすべてのフォーム値を渡したところ、現在のシナリオでは検証されている要素の値しか取得できないようです。

これが私のフォームのセットアップ方法です

    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以前は、これがコールバックの 2 番目の引数の一部として値を渡すことも期待していました。

以前にこの問題を経験した人はいますか? アプリケーションの他の領域で期待どおりにコールバック関数を使用していますが、ここでは機能していないようです。

前もって感謝します

明確にするために(検証に影響を与えるとは思いませんが)、関数$this->addElementは私自身の関数であり、特性に保持され、単純です:

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

1 に答える 1

0

コールバックには、入力フィルターが認識している他の値のみが渡されることが判明しました。

これに対する解決策は次のとおりです。

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

于 2014-08-01T10:25:40.177 に答える