如何使用Yii的$ form-> labelEx为标签添加跨度?

时间:2012-01-08 21:20:35

标签: yii

我希望生成以下标记:

<label>some label here <span>(optional)</span></label>

有没有办法做到这一点,使用Yii labelEx 或只是标签

由于

4 个答案:

答案 0 :(得分:5)

如果属性是必需的

您可以像这样设置CHtml静态属性

CHtml::$beforeRequiredLabel = '';
CHtml::$afterRequiredLabel = '<span>(optional)</span>';

Yii将生成一个标签

<label>CHtml::$beforeRequiredLabel.$label.CHtml::$afterRequiredLabel</label>

但静态属性将影响$ form-&gt; labelEx()生成的所有标签(@see CHtml :: activeLabelEx())

如果您不需要,则必须将静态属性设置为默认值

如果不需要该属性

您可以设置htmlOptions

$form->labelEx($model, $attribute, array('label' => 'your label'))

答案 1 :(得分:3)

很简单,使用Decorator模式:

<?php
// components/CustomCHtml.php

class CustomCHtml extends CHtml
{
    public static function activeLabelEx($model,$attribute,$htmlOptions=array())
    {
        if (isset($htmlOptions['optional']) && $htmlOptions['optional']) {
            if (isset($htmlOptions['label']) && $htmlOptions['label']) {
                $htmlOptions['label'] .= $htmlOptions['optional'];
            } else {
                $htmlOptions['label'] = $htmlOptions['optional'];
            }
        }

        return parent::activeLabelEx($model,$attribute,$htmlOptions);
    }
}

用例:

<?php echo CustomCHtml::activeLabelEx($model, 'field', array('optional'=>' <span>(optional)</span>')); ?>

答案 2 :(得分:0)

这是一个让它成为可能的小黑客。

<?php 
                $username = $form->field($model, 'username')
                ->input('text', ['class' => 'form-control input-lg'])
                ->label(true, 'username', ['class' => 'fa fa-user signin-form-icon']);

                $username->parts['{label}'] = '<span class="fa fa-user signin-form-icon">dwe</span>';

                echo $username;
            ?>

答案 3 :(得分:0)

您可以使用CHtml::$afterRequiredLabel和/或CHtml::$beforeRequiredLabel

$initValue = CHtml::$afterRequiredLabel;
CHtml::$afterRequiredLabel = $initValue.'<span>(optional)</span>';
echo $form->labelEx($model, $fname, array('class' => ''));
echo $form->textField($model, $fname, array('class' => ''));
CHtml::$afterRequiredLabel = $initValue;

这样,标签将仅应用于指定的表单字段。实际上,您在临时变量上设置CHtml::$afterRequiredLabel和/或CHtml::$beforeRequiredLabel的初始值,覆盖所需的值,然后将其重置为原始值。