Как получить выбранную опцию элемента кнопки радиона в Zend Framework 2?
В Fieldset
у меня есть Element\Radio
foo
а также Element\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 ответ
Выбранная опция отправляется на сервер вместе со всем остальным из 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
когда это не так, помечая ввод как недействительный.