Zend framework 如何使用Zend_表单装饰器更改表单的布局?

Zend framework 如何使用Zend_表单装饰器更改表单的布局?,zend-framework,zend-form,decorator,zend-decorators,Zend Framework,Zend Form,Decorator,Zend Decorators,我完全搞不懂装饰师是怎么工作的。这是我试图实现的html结构: <form id="" action="" method="post"> <fieldset><legend>Contact form</legend> <p> <label for="name">Name</label> <input type="text" name=

我完全搞不懂装饰师是怎么工作的。这是我试图实现的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> 

联系方式

名称

电子邮件

网站

消息

发送

如何摆脱定义列表格式,改用基于段落标记的布局


更新:是否有办法将此样式应用于我创建的所有表单?不必对每个表单都应用装饰程序?

过了一段时间,我放弃了,只使用了ViewRenderer装饰程序。下面是一篇很好的帖子,解释了如何做到这一点()。如果您真的想知道如何使用装饰器,那么该系列的其余部分也很好


使用ViewRenderer装饰器,您基本上是根据模板(与MVC本身不同)呈现表单。通过这种方式,您可以最终控制一切,但当然,您从灵活性中获得的东西,在RAD中失去的东西,在复杂性中弥补的东西。

过了一段时间,我放弃了,只使用了ViewRenderer装饰器。下面是一篇很好的帖子,解释了如何做到这一点()。如果您真的想知道如何使用装饰器,那么该系列的其余部分也很好


使用ViewRenderer装饰器,您基本上是根据模板(与MVC本身不同)呈现表单。通过这种方式,您可以最终控制一切,但当然,您从灵活性中获得的东西,在RAD中失去的东西,在复杂性中弥补的东西。

如果您想更改表单的元素,您必须重置表单及其元素的装饰器

在p标记中封闭字段的示例

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()中执行的表单装饰程序


如果要更改表单的元素,必须重置表单及其元素的装饰器

在p标记中封闭字段的示例

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()中执行的表单装饰程序


有没有一种方法可以全局应用它?您可以对所有Zend_元素类和重载loadDefaultDecorators进行子类化。有没有一种方法可以全局应用它?您可以对所有Zend_元素类和重载loadDefaultDecorators进行子类化。