4

我有一个带有单选按钮的表单:

$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>

但我需要,该标签文本由 a 包裹<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

2 回答 2

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]);
于 2015-12-17T23:58:29.817 回答
0

对于您的问题,我看到了三种可能的解决方案。

1)扩展Zend\Form\View\Helper\FormRadio类,覆盖renderOptions方法,几乎​​完全复制您可以找到的方法,Zend\Form\View\Helper\FormMultiCheckbox但可能添加一个选项以将可选属性传递给span元素

2)非常微妙,但可以节省您编写一些代码:使用翻译器。由于单选值选项已翻译,您可以保留在配置中定义的值,但在转换中添加span元素

3)不要$this->formElement用来显示元素,而是实际写所有的html

于 2015-12-22T11:14:33.847 回答