如何设置另一个表单字段的值?

时间:2015-07-04 18:59:08

标签: php zend-framework zend-framework2 zend-form zend-inputfilter

例如,我们有一个包含两个字段的表单,过滤器和验证器:

$factory = new \Zend\Form\Factory();
$form = $factory->createForm([
    'elements' => [
        [
            'spec' => [
                'name' => 'fieldOne',
                'type'  => 'Text',
            ],
        ],
        [
            'spec' => [
                'name' => 'fieldTwo',
                'type' => 'Text',
            ],
        ],
    ],
    'input_filter' => [
        'fieldOne' => [
            'filters' => [
                ['name' => 'StringTrim'],
            ],
            'validators' => [                      
                new \Application\Validator\FieldOneValidator(),
            ],
        ],
        'fieldTwo' => [
            'filters' => [
                ['name' => 'StringToUpper'],
            ],
        ],
    ],
]);

如果fieldOne有效并且fieldTwo为空,那么我们需要将过滤后的值fieldOne设置为fieldTwo并对其进行过滤。

$form->setData([
    'fieldOne' => '    test    ',
    'fieldTwo' => '',
]);
if ($form->isValid()) {
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'TEST']
}

$form->setData([
    'fieldOne' => '    test    ',
    'fieldTwo' => 'not empty',
]);
if ($form->isValid()) {
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'NOT EMPTY']
}

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

看看相同的'验证器: https://github.com/zendframework/zend-validator/blob/master/src/Identical.php#L154

在您的验证器中,第二个参数$context传递给isValid,它为您提供表单中的值。

您希望利用其他字段的填充方式来验证您当前的字段。

换句话说,创建一个自定义验证器,并使用' context'在验证器中,您附加到具有依赖关系的字段。