我有一个关于使用Zend_Form_Decorator_Label的问题,为了在需要表单元素时得到以下结果我需要获得Label-text *并且我想知道如何以最可重用的方式实现这一点?
是编写新装饰器还是覆盖zend_View_helper_FormLabel? 也许还有其他方法可以实现这个目标吗?
任何帮助都将受到赞赏。
答案 0 :(得分:4)
您可以在创建装饰器时添加以下选项之一:
代码示例:
$elementDecorators = array(
'ViewHelper',
array('Label', array('requiredSuffix' => ' *')),
);
$userName = new Zend_Form_Element_Text('userName');
$userName->setDecorators($elementDecorators);
$userName->setLabel('User Name');
或者你可以在现有的装饰器上显式设置后缀/前缀:
$userName->getDecorator('Label')->setReqSuffix(' *');
$userName->getDecorator('Label')->setOptSuffix('(Optional) ');
答案 1 :(得分:3)
由于Label装饰器将CSS类required
添加到附加到根据需要指定的表单输入元素的<label>
元素,因此我可以使用以下方法添加符号(如星号)带有:after
声明的CSS content()
选择器:
label.required:after {
content: "*";
}
但是,我发现让间距正确,让星号以粗体或我想要的颜色呈现等等可能会很棘手。结果,我经常回到使用CSS来渲染标签它本身是粗体或不同的颜色,然后在表单的顶部或底部添加一个图例(“需要粗体/红色字段”或其他一些)(通常通过创建我自己的自定义图例装饰器,但有时在视图中-script本身)。
答案 2 :(得分:3)
class FormDecorators {
public static $simpleElementDecorators = array(
array('ViewHelper'),
array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
array('Description', array('tag' => 'div', 'class' => 'desc-item')),
array('Errors', array('class' => 'errors')),
array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
);
}
对于你使用的元素
$elem->setDecorators(FormDecorators::$simpleElementDecorators)
我在标签数组中添加了'requiredPrefix'参数所需的前缀。
array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),