Zend framework 在创建元素时删除装饰器

Zend framework 在创建元素时删除装饰器,zend-framework,Zend Framework,从表单中删除错误装饰程序时遇到问题。这是我创建元素的方式: $this->setAttribute('method','post'); $this->add( array( 'name'=>'username', 'attributes'=>array( 'type'=>'text', 'id'=>'username', ), 'option

从表单中删除错误装饰程序时遇到问题。这是我创建元素的方式:

$this->setAttribute('method','post');
$this->add(
    array(
        'name'=>'username',
        'attributes'=>array(
            'type'=>'text',
            'id'=>'username',
        ),
        'options'=>array(
            'label'=>'Username'
        ),
    )
);

有没有一种方法可以从这里删除装饰器,或者可以从控制器中删除装饰器。我对此进行了研究,但找不到好的答案。提前谢谢。

这基本上是不可能的。如果确实希望在创建元素时避免使用其中一个装饰器,则必须传递除一个之外的所有所需装饰器的列表,例如:

// Zend_Form based class body
$this->addElement('text', 'myfield', array(
        'label' => 'My field',
        'decorators' => array(
                'ViewHelper',
                array('HtmlTag', array('tag' => 'div')),
        ),
);
然而,更简单的方法是在创建元素之后按名称删除单个装饰器。如果您在基于Zend_表单的类中,只需调用:

$this->getElement('myfield')->removeDecorator('Errors');
removeDecorator()方法是公共的,因此您可以在控制器中使用它:

$form = new My_Form();
$form->getElement('myfield')->removeDecorator('Errors');

这个语法对添加到表单中的元素有效吗?是的。它有效。它只是构造函数的一部分。。