Php 如何在ZF2表单中制作自定义单选按钮标签?

Php 如何在ZF2表单中制作自定义单选按钮标签?,php,zend-framework2,zend-form2,Php,Zend Framework2,Zend Form2,我有一个带有单选按钮的表单: $this->add([ 'name' => 'time', 'options' => [ 'value_options' => [ '0' => '9:00 - 12:00', '1' => '12:00 - 16:00', '2' => '16:00 - 19:00', ], 'labe

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

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

并获取输出(格式化为可读性):


9:00 - 12:00
12:00 - 16:00
16:00 - 19:00
但是我需要,这个标签文本被一个
包装起来:


9:00 - 12:00
12:00 - 16:00
16:00 - 19:00

实现它的最佳方法是什么?

解决方案是使用标签选项“禁用html退出”:

$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]);
$this->添加([
“名称”=>“时间”,
“选项”=>[
“值_选项”=>[
'0' => '9:00 - 12:00',
'1' => '12:00 - 16:00',
'2' => '16:00 - 19:00',
],
“标签属性”=>[
'class'=>'WW_OBJ_fm-label',
]
],
'键入'=>'收音机'
]);
$element=$this->get('time');
$element->setLabelOptions(['disable\u html\u escape'=>true]);

我认为有三种可能的解决方案可以解决您的问题

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

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


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

,不幸的是,此解决方案不可接受,因为值标签选项将在以后的表单值计算中使用。我已经完成了您在解决方案3中编写的内容。我个人更喜欢解决方案1,但大量重复的代码对我来说不是很有吸引力。@GennadiyLitvinyuk我同意你的看法,尽管这只是一种方法。。。另一种可能是进行一点重构,然后向Zend的人发出请求,但这肯定需要一些时间
<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>
$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]);