如何使用Zend Forms在标签内添加HTML标签?

时间:2015-04-10 09:07:27

标签: php zend-framework zend-framework2 zend-form

我是Zend的新手,不得不说使用表格让我很头疼。所以我需要一些帮助,因为我认为在框架中这样做更好。所以,我有以下PHP代码来创建一组单选按钮

$this->addElement(
    'radio',
    'paymentmethod',
     array(
       'multioptions' => array('aa'=>'AA','bb'=>'BB','cc'=>'CC','dd'=>'DD','ee'=>'EE'),
       'decorators'   => self::$inputDecoratorTwBsFormRadioBtn,
       'disableLoadDefaultDecorators' => true,
     )
);

在我的装饰者中,我有以下代码:

public static $inputDecoratorTwBsFormRadioBtn = array(
 'ViewHelper',
 array(
       'Errors', 
        array('class' => 'alert alert-danger', 'placement' => 'prepend')
 ),
 array(
       array('row' => 'HtmlTag', ),
       array('tag' => 'div', 'class' => 'form-group-radio-btn')
 ),
);

我的HTML的最终结果如下:

<div class="form-group-radio-btn">
  <label><input type="radio" name="paymentmethod" id="paymentmethod-aa" value="aa">AA</label><br>
  <label><input type="radio" name="paymentmethod" id="paymentmethod-bb" value="bb">BB</label><br>

...
</div>

我要做的是在span内添加label元素。所以我有这样的标签:

<label><input type="radio" name="" id="" value="aa">AA<span></span></label>

我尝试了以下内容:

$this->addElement(
    'radio',
    'paymentmethod',
         array(
            'multioptions' => array('aa'=>'AA <span> </span>'...

但显然,这种方法将span元素作为文本。

关于如何添加此HTML标记的任何想法?

1 个答案:

答案 0 :(得分:1)

也许您可以尝试通过在disable_html_escape选项中将true选项设置为label来实现此目的。就像这样:

$this->add(array(
'type'  => 'radio',
'name'  => 'paymentmethod',
'options' => array(
    'value_options' => array(
        'AA' => array(
            'label' => 'AA <span></span>',
            'value' => 'aa',
            'label_options' => array(
            'disable_html_escape' => true,
             )

        ),
        'BB' => array(
            'label' => 'BB <span></span>',
            'value' => 'bb',
            'label_options' => array(
            'disable_html_escape' => true,
            )
        ),
        'CC' => array(
            'label' => 'CC <span></span>',
            'value' => 'cc',
            'label_options' => array(
            'disable_html_escape' => true,
            )
        ),
    ),
),
));

编辑:

如果上面的代码不起作用,您可以在视图中执行以下操作:

echo html_entity_decode($this->formRow($form->get('element')));

html_entity_decode()函数会将element中的所有HTML标记转换为适用的字符,就像html代码不会被转义一样。

但是要制作一个干净的解决方案,您应该创建自定义FormLabel并在覆盖html_entity_decode的{​​{1}}函数时使用__invoke

没有测试过,但你会有这样的事情:

FormLabel