現在、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)
);
}