ZF2获取验证器中其他字段的过滤值

时间:2014-09-18 07:14:29

标签: php zend-framework2

在需要能够从验证器中访问不同表单元素的过滤值的情况下,出现了多次这种情况。例如,我们有一个电话号码验证器,需要知道哪个国家/地区可以验证电话号码。

即使使用验证器上的选项设置此选项,仍然需要使用表单中已过滤的国家/地区值来设置该选项。

有没有人有解决这类情况的经验?

修改

我知道在验证时传递给$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)

0 个答案:

没有答案