我有一个关于使用 Zend_Form_Decorator_Label 的问题,为了在需要表单元素时获得以下结果,我需要获取 Label-text *,我想知道如何以最可重用的方式实现它?
是编写新的装饰器还是覆盖 zend_View_helper_FormLabel ?也许还有其他方法可以实现这一目标?
任何帮助将不胜感激。
我有一个关于使用 Zend_Form_Decorator_Label 的问题,为了在需要表单元素时获得以下结果,我需要获取 Label-text *,我想知道如何以最可重用的方式实现它?
是编写新的装饰器还是覆盖 zend_View_helper_FormLabel ?也许还有其他方法可以实现这一目标?
任何帮助将不胜感激。
您可以在创建装饰器时添加以下选项之一:
代码示例:
$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) ');
由于 Label 装饰器将 CSS 类添加required
到<label>
附加到根据需要指定的表单输入元素的元素中,因此我能够通过使用:after
带有content()
声明的 CSS 选择器添加符号(如星号):
label.required:after {
content: "*";
}
但是,我发现设置正确的间距、让星号以粗体或我想要的颜色呈现等可能很棘手。因此,我经常回退到使用 CSS 以粗体呈现标签本身或以不同的颜色,然后在表单的顶部或底部添加一个图例(“需要粗体/红色字段”或类似的)(通常通过创建我自己的自定义图例装饰器,但有时在视图脚本本身)。
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>')),