Zend Form 装饰器的麻烦
Posted
技术标签:
【中文标题】Zend Form 装饰器的麻烦【英文标题】:Zend Form decorators trouble 【发布时间】:2011-01-09 02:10:15 【问题描述】:如何使用表单元素的表单装饰器实现以下目标:
<dt>
<ul>
<li>The errors</li>
<li>The errors</li>
</ul>
<label>The label</label>
</dt>
<dd>
<input type="text" value="The input field">
</dd>
换句话说,我希望它们不是附加在输入字段之后的错误,而是附加在标签之前。我确实但是想保留<dt>
和<dd>
标签,如上图所示。
【问题讨论】:
【参考方案1】:好的,我知道怎么做。渐渐地,装饰器开始对我有意义:
$decorators = array(
'Label',
array( 'Errors', array( 'placement' => 'prepend' ) ),
array( array( 'dt' => 'htmlTag' ), array( 'tag' => 'dt' ) ),
array( array( 'ddOpen' => 'HtmlTag' ), array( 'tag' => 'dd', 'openOnly' => true, 'placement' => 'append' ) ),
array( 'ViewHelper' ),
array( array( 'ddClose' => 'HtmlTag' ), array( 'tag' => 'dd', 'closeOnly' => true, 'placement' => 'append' ) )
);
它的作用如下:
-
首先渲染标签
然后添加(默认 = 附加)错误
在 HtmlTag (dt) 中包装(默认)所有以前的内容
接下来,附加(默认 = 换行)一个打开的 HtmlTag (dd)
然后附加(默认)ViewHelper
接下来,附加(默认 = wrap)一个结束 HtmlTag (dd)
然后设置装饰器:
// be sure to only set them, after you have added the relevant elements to the form
$this->setElementDecorators( $decorators );
PS:
请注意,尽管我的特定示例会产生无效的 html。 ;-) 我后来才发现 <dt>
元素中不允许使用 <ul>
元素和 DOCTYPE
HTML 4.01 strict
【讨论】:
确保你接受你的答案,所以它显示为已解决:)【参考方案2】:在你的表单类中,试试这个:
$this->setElementDecorators(array(
'Errors',
'ViewHelper',
'Label',
));
【讨论】:
恐怕这不会削减它。这导致<ul></ul><input/><label></label>
,没有<dt>
和<dd>
's以上是关于Zend Form 装饰器的麻烦的主要内容,如果未能解决你的问题,请参考以下文章
Zend Form reCaptcha ViewScript 装饰器
如何使用装饰器将多个 div 或字段集添加到 zend_form?