如何在Zend Framework 2中获取radion按钮元素的选定选项?

时间:2016-11-09 11:57:37

标签: zend-framework2 radio-button zend-form zend-form-element zend-form-fieldset

Fieldset我有一个Element\Radio fooElement\Text bar

public function init()
{
    $this->add(
        [
            'type' => 'radio',
            'name' => 'foo',
            'options' => [
                'label' => _('foo'),
                'value_options' => [
                    [
                        'value' => 'a',
                        'label' => 'a',
                        'selected' => true
                    ],
                    [
                        'value' => 'b',
                        'label' => 'b'
                    ]
                ]
            ]
            ...
        ]);

    $this->add(
        [
            'name' => 'bar',
            'type' => 'text',
            'options' => [
                'label' => 'bar',
                ...
            ],
            ...
        ]);
}

字段bar的验证取决于所选的foo选项。如果我可以获得foo

的选定值,则很容易实现
public function getInputFilterSpecification()
{
    return [
        'bar' => [
            'required' => $this->get('foo')->getCheckedValue() === 'a',
            ...
        ],
    ];
}

但是没有方法Radio#getCheckedValue()。好吧,我可以迭代$this->get('foo')->getOptions()['value_options'],但它真的是唯一的方法吗?

如何(在Fieldset#getInputFilterSpecification()中)Zend\Form\Element\Radio的所选选项?

1 个答案:

答案 0 :(得分:0)

所选选项与HTML表单中的所有其他内容一起发送到服务器,并且所有这些都可通过$context数组在验证器中使用。 您可以使用回调验证程序和$context数组创建一个有条件的必填字段:

public function getInputFilterSpecification() {
    return [
        'bar' => [
            'required' => false,
            'allow_empty' => true,
            'continue_if_empty' => true,
            'required' => true,
            'validators' => [
                [
                    'name' => 'Callback',
                    'options' => [
                        'callback' => function ($value, $context) {
                            return $context['foo'] === 'a'
                        },
                        'messages' => [
                            \Zend\Validator\Callback::INVALID_VALUE => 'This value is required when selecting "a".'
                        ]
                    ]
                ]
            ]
        ],
    ];
}

这将检查'foo'是否等于'a',即选择选项'a'并返回true(当它是有效时)和false当它是不,标记输入无效。