我希望生成以下标记:
<label>some label here <span>(optional)</span></label>
有没有办法做到这一点,使用Yii labelEx 或只是标签?
由于
答案 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
的初始值,覆盖所需的值,然后将其重置为原始值。