Как сделать собственные метки Radio-Button в формах ZF2?

У меня есть форма с радио-кнопкой:

$this->add([
'name' => 'time',
'options' => [
'value_options' => [
'0' => '9:00 - 12:00',
'1' => '12:00 - 16:00',
'2' => '16:00 - 19:00',
],
'label_attributes' => [
'class' => 'WW_OBJ_fm-label',
]
],
'type' => 'Radio'
]);

В представлении я делаю вывод так:

<div>
<?php echo $this->formElement($form->get('time')); ?>
</div>

и получить вывод (отформатированный для удобства чтения):

<div>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="0"/>
9:00 - 12:00
</label>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="1"/>
12:00 - 16:00
</label>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="2"/>
16:00 - 19:00
</label>
</div>

Но мне нужно, чтобы текст метки был завернут <span>:

<div>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="0"/>
<span class="WW_label-text">9:00 - 12:00</span>
</label>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="1"/>
<span class="WW_label-text">12:00 - 16:00</span>
</label>
<label class="WW_OBJ_fm-label">
<input type="radio" name="time" value="2"/>
<span class="WW_label-text">16:00 - 19:00</span>
</label>
</div>

Каков наилучший способ достичь этого?

4

Решение

Я вижу три возможных решения вашей проблемы.

1) Расширить Zend\Form\View\Helper\FormRadio класс, переопределяя renderOptions метод, воспроизводящий почти полностью тот, который вы можете найти в Zend\Form\View\Helper\FormMultiCheckbox но, возможно, добавив опцию для передачи необязательных атрибутов в span элемент

2) Очень тонкий, но может сэкономить вам написание кода: использование переводчика. Поскольку параметры значения радио переведены, вы можете сохранить значения, определенные в конфигурации, но добавив span элемент в переходе

3) не использовать $this->formElement чтобы отобразить элемент, но на самом деле написать все HTML

0

Другие решения

Решением является использование labelOption ‘disable_html_escape’:

$this->add([
'name' => 'time',
'options' => [
'value_options' => [
'0' => '<span class="WW_label-text">9:00 - 12:00</span>',
'1' => '<span class="WW_label-text">12:00 - 16:00</span>',
'2' => '<span class="WW_label-text">16:00 - 19:00</span>',
],
'label_attributes' => [
'class' => 'WW_OBJ_fm-label',
]
],
'type' => 'Radio'
]);
$element = $this->get('time');
$element->setLabelOptions(['disable_html_escape' => true]);
0

По вопросам рекламы [email protected]