我对装饰器的工作原理感到困惑。这是我想要实现的html结构:
<form id="" action="" method="post">
<fieldset><legend>Contact form</legend>
<p>
<label for="name">Name</label>
<input type="text" name="name" id="name" size="30" />
</p>
<p>
<label for="email">Email</label>
<input type="text" name="email" id="email" size="30" />
</p>
<p>
<label for="web">Website</label>
<input type="text" name="web" id="web" size="30" />
</p>
<p>
<label for="message">Message</label>
<textarea name="message" id="message" cols="30" rows="10"></textarea>
</p>
<p class="submit"><button type="submit">Send</button></p>
</fieldset>
</form>
如何摆脱定义列表格式并改为使用基于段落标签的布局?
更新:我有办法将此样式应用于我创建的所有表单吗?而不是必须将装饰器应用于每个表单?
答案 0 :(得分:1)
如果您想更改表单的元素,您必须重置表单的装饰器及其元素。
将字段括在p-tag中的示例
class Default_Form_Contact extends Zend_Form
{
public function init()
{
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name:')
->setDecorators(
array(
array('ViewHelper', array('helper' => 'formText')),
'Errors',
array('Description', array('tag' => 'p', 'class' => 'description')),
array('HtmlTag', array('tag' => 'p', 'id' => 'name-element')),
array('Label', array('class' => 'label')),
)
);
$this->addElement($name);
}
}
你真正需要哪些装饰师你必须考虑自己。对于表单装饰器,您可以在init()
中完成$this->setDecorators(array(some decorators));
答案 1 :(得分:0)
过了一会儿,我就放弃了,只使用了ViewRenderer装饰器。这是一篇很好的文章,解释了如何做到这一点(http://weierophinney.net/matthew/archives/215-Rendering-Zend_Form-decorators-individually.html)。如果您真的想知道如何使用装饰器,那么该系列的其余部分也很好。
使用ViewRenderer装饰器,您基本上是针对模板渲染表单(与MVC本身不同)。通过这种方式,您可以最终控制所有内容,但当然,您在灵活性方面获得了什么,您在RAD中失败了,并且您在复杂性方面做出了贡献。