使用标签装饰器添加所需标记的最佳方法是什么 - Zend

时间:2012-08-28 16:31:27

标签: zend-framework zend-form zend-form-element

我有一个关于使用Zend_Form_Decorator_Label的问题,为了在需要表单元素时得到以下结果我需要获得Label-text *并且我想知道如何以最可重用的方式实现这一点?

是编写新装饰器还是覆盖zend_View_helper_FormLabel? 也许还有其他方法可以实现这个目标吗?

任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:4)

您可以在创建装饰器时添加以下选项之一:

  • optionalPrefix :元素可选时要使用的标签前缀
  • optionalSuffix :元素可选时要使用的标签的后缀
  • requiredPrefix :需要元素时使用的标签前缀
  • requiredSuffix :需要元素时使用的标签后缀

代码示例:

$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>')),