我有一个扩展Zend_Form的类(简化):
class Core_Form extends Zend_Form
{
protected static $_elementDecorators = array(
'ViewHelper',
'Errors',
array('Label'),
array('HtmlTag', array('tag' => 'li')),
);
public function loadDefaultDecorators()
{
$this->setElementDecorators(self::$_elementDecorators);
}
}
然后我使用该类创建我的所有表单:
class ExampleForm extends Core_Form
{
public function init()
{
// Example Field
$example = new Zend_Form_Element_Hidden('example');
$this->addElement($example);
}
}
在我的一个视图中,我需要只显示 这一个字段(没有Zend_Form生成的任何其他内容)。所以在我看来,我有这个:
<?php echo $this->exampleForm->example; ?>
这样可以正常工作,除非它生成如下字段:
<li><input type="hidden" name="example" value=""></li>
这显然是因为我将元素装饰器设置为包含HtmlTag:tag =&gt; '礼'。
我的问题是:如何禁用此元素的所有装饰器。我不需要装饰器来隐藏输入元素。
答案 0 :(得分:5)
设置它的最佳位置是公共函数loadDefaultDecorators()
例如:
class ExampleForm extends Core_Form
{
public function init()
{
//Example Field
$example = new Zend_Form_Element_Hidden('example');
$this->addElement($example);
}
public function loadDefaultDecorators()
{
$this->example->setDecorators(array('ViewHelper'));
}
}
答案 1 :(得分:3)
将表单元素的装饰器重置为仅使用“ViewHelper”。例如:
<?php echo $this->exampleForm->example->setDecorators(array('ViewHelper')) ; ?>
显然,这个观点不是理想的做法,但你明白了。请注意,调用setDecorator *** s ***()会重置所有装饰器,而不是添加新装饰器。
答案 2 :(得分:3)
如果你在隐藏元素上禁用dd / dt装饰器,你将拥有无效的XHTML,因为你的某些东西不是dl中的有效项。唯一的解决方案是在所有表单元素上禁用这些装饰器,而不仅仅是隐藏的元素,并在整个表单上禁用它们。为了保持一致性,您需要在所有表单中执行此操作。
恕我直言,这是ZF的一个糟糕的设计决定。我的意思是说,输入的值是“术语”的“定义”在语义上是一个可爱的想法,但它没有完全考虑。同样的问题:Zend Framework: How do I remove the decorators on a Zend Form Hidden Element?
答案 3 :(得分:1)
如果您打算以这种方式添加元素:
$this->addElement(
'text',
'a1',
array('required' => true, 'validators' => array('Alpha'))
);
您可以使用以下内容获取每个元素的dd/dt
标记:
$this->setElementDecorators(array('ViewHelper'));
或者如果您想以其他方式添加元素:
$nombre1 = new Zend_Form_Element_Text(
'n1',
array('id'=> 'Nombre1', 'validators' => array('Alpha') )
);
//$nombre1->setDecorators(array('ViewHelper'));
$this->addElement($nombre1);
您需要取消注释:
//$nombre1->setDecorators(array('ViewHelper'));
以禁用dd/dt
标记。
最后一种方法是禁用当前元素,表单中的其他元素保持<dd>
<dt>
标记正常。
答案 4 :(得分:0)
这就是我的所作所为:
class M_Form_Element_Hidden extends Zend_Form_Element_Hidden {
public function init() {
$this->setDisableLoadDefaultDecorators(true);
$this->addDecorator('ViewHelper');
$this->removeDecorator('DtDdWrapper');
$this->removeDecorator('HtmlTag');
$this->removeDecorator('Label');
return parent::init();
}
}
然后在你的表格中,
$element = new M_Form_Element_Hidden('myElement');
$this->addElement($element);