在需要能够从验证器中访问不同表单元素的过滤值的情况下,出现了多次这种情况。例如,我们有一个电话号码验证器,需要知道哪个国家/地区可以验证电话号码。
即使使用验证器上的选项设置此选项,仍然需要使用表单中已过滤的国家/地区值来设置该选项。
有没有人有解决这类情况的经验?
修改
我知道在验证时传递给$context
验证器的Callback
参数,但它只包含输入,因为它已提交,因此不会过滤和没用。
修改
我能够实现我正在寻找的内容,虽然我真的不喜欢实现,但它不适用于许多常见的表单场景。我真的希望有更好的方法。此示例不是基于上面的国家/地区示例,但它具有相同的想法。
<?php
class MyValidator extends \Zend\Validator\AbstractValidator {
public $form;
public function isValid($value) {
$filtered_values = $this->form->getInputFilter()->getValues();
var_dump($filtered_values);
}
}
$validator = new MyValidator();
$factory = new \Zend\Form\Factory();
$form = $factory->createForm([
'input_filter' => [
[
'name' => 'foobar',
'required' => false,
'validators' => [$validator]
],
[
'name' => 'date',
'required' => true,
'filters' => [
[
'name' => 'DateTimeFormatter',
'options' => [
'format' => 'Y-m-d g:i:s a'
]
],
['name' => 'StringToUpper']
]
]
]
]);
$validator->form = $form;
$form->setData([
'foobar' => 'abc123',
'date' => 'August 3, 2014'
]);
$form->isValid();
输出:
array (size=2)
'foobar' => string 'abc123' (length=6)
'date' => string '2014-08-03 12:00:00 AM' (length=22)