目前使用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)
);
}
答案 0 :(得分:0)
事实证明,回调只会传递输入过滤器知道的其他值。
解决方法是:
$filter->add(['name' => 'card_type', 'required' => true]);