自定义表单装饰器中的 Zend 框架类
Posted
技术标签:
【中文标题】自定义表单装饰器中的 Zend 框架类【英文标题】:Zend Framework Class in Custom Form Decorator 【发布时间】:2012-04-10 11:08:15 【问题描述】:我正在使用位于以下位置的自定义表单装饰器:http://code.google.com/p/digitalus-cms/source/browse/trunk/library/Digitalus/Form/Decorator/Composite.php?r=767
文件底部(第 70 行)是:
$output = '<div class="form_element">'
. $label
. $input
. $errors
. $desc
. '</div>';
我想让 DIV 类动态并在我在控制器中创建元素时传递。我使用的任何内置 ZEND 函数只修改 LABEL 或 INPUT。这是我创建元素的示例:
$decorator = new Composite();
$this->addElement('text', 'start', array(
'label' => 'Start Number',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
'alnum',
),
'decorators' => array($decorator)
));
任何想法都将不胜感激。感谢您花时间查看!
【问题讨论】:
【参考方案1】:现在确定为什么所有的 CSS 类都是硬编码的,如果允许你更改当前的装饰器,只需修复 render() 方法:
class Digitalus_Form_Decorator_Composite
/* ... */
public function render($content)
$element = $this->getElement();
if (!$element instanceof Zend_Form_Element)
return $content;
if (null === $element->getView())
return $content;
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$label = $this->buildLabel();
$input = $this->buildInput();
$errors = $this->buildErrors();
$desc = $this->buildDescription();
$output = '<div class="'.$this->getOption('class').'">'
. $label
. $input
. $errors
. $desc
. '</div>';
switch ($placement)
case (self::PREPEND):
return $output . $separator . $content;
case (self::APPEND):
default:
return $content . $separator . $output;
/* ... */
在元素创建期间:
$element->setDecorators(array(
/* ... */
array(array('div'=>'Composite'), array('class' => 'my_class_name'))
/* ... */
)));
如果您不想编辑现有的装饰器,只需扩展它并覆盖 render() 方法...
【讨论】:
+1 不错的答案,你领先我一分钟 :) 我的想法与getOptions
和构造函数相同。
谢谢,通常我只是帮助zf,这里比较安静:)
太棒了 - 就像一个魅力!只需在初始化我的表单时定义 addPrefixPath ,一切都很好。非常感谢。以上是关于自定义表单装饰器中的 Zend 框架类的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 zend from 在 zend 框架 2 中添加自定义属性