正如标题所暗示的,我在Zend Framework中有一个关于装饰器的问题。请考虑以下代码示例:
$this->addElement('select', 'DisplayUntil', array(
'label' => 'Display until:',
'multiOptions' => $this->getOptions(),
'filters' => array(
'HTMLEntities',
'StringTrim',
),
'validators' => array(
'Int',
),
));
这是我向表单添加元素的首选方法。在尝试建立最佳实践时,我已经标准化了使用工厂方法而不是方法链。为什么?我个人觉得它更具可读性,它缩短了我自定义表单类的长度,即编码更少。上面的示例工作得非常好,但是,我很难找到文档或示例,其中使用相同的方法添加装饰器。因此,在添加装饰器时,我假设使用相同的代码片段,您将执行以下操作:
$this->addElement('select', 'DisplayUntil', array(
'label' => 'Display until:',
'multiOptions' => $this->getOptions(),
'filters' => array(
'HTMLEntities',
'StringTrim',
),
'validators' => array(
'Int',
),
'decorators' => array(
'ViewHelper',
'Label' => array(
'tag' => 'dt'
),
'HtmlTag' => array(
'tag' => 'div',
'openOnly' => true,
'id' => 'divDisplayUntil',
'placement' => 'prepend',
),
),
));
不幸的是我在注册表中找不到“名称插件'Dt';使用路径:Zend_Form_Decorator_:Zend / Form / Decorator /”错误消息。我是Zend的新手,如果有人能告诉我如何使前面的代码示例有效,我将不胜感激?这种方法甚至可能吗?
谢谢!
答案 0 :(得分:2)
装饰者似乎还有一层数组。这是1.1x手册:
$this->addDecorators(array(
array('ViewHelper'),
array('Errors'),
array('Description', array('tag' => 'p', 'class' => 'description')),
array('HtmlTag', array('tag' => 'dd')),
array('Label', array('tag' => 'dt')),
));
所以在你的情况下试试
'decorators' => array(
array('ViewHelper'),
array('Label', array(
'tag' => 'dt'
)
),
array('HtmlTag', array(
'tag' => 'div',
'openOnly' => true,
'id' => 'divDisplayUntil',
'placement' => 'prepend',
)
),
),