我有一个案例,其中UX / Designer设计了一个表单设计,要求我在phtml模板中自己创建<form></form>
标签,而不是由于一些非输入相关而让Zend_Form自动生成它们标记我需要填写。
如何让Zend_Form不再呈现表单标签?我编写了以下可以改进的render
函数覆盖,但我似乎无法通过操作装饰器来做任何事情。
public function render(Zend_View_Interface $view = null)
{
$content = parent::render($view);
$content = str_replace('</form>','',$content);
$idx = strpos($content,'>',4) + 1;
$content = substr($content,$idx);
return $content;
}
答案 0 :(得分:9)
如果我正确地读了你的问题,答案很简单: -
$form = new Zend_Form();
$text = new Zend_Form_Element_Text('text');
$text->setLabel('text');
$form->addElement($text);
$form->removeDecorator('form'); // the bit you are looking for :)
Zend_Debug::dump($form->render());
提供以下输出: -
<dl class="zend_form">
<dt id="text-label">
<label for="text" class="optional">text</label>
</dt>
<dd id="text-element">
<input type="text" name="text" id="text" value="">
</dd>
</dl>
即没有呈现<form>
标记。我想这就是你需要的。
如果您希望通过扩展Zend_Form
自动在每个表单中执行此操作,那么按以下方式覆盖render()
方法: -
public function render(Zend_View_Interface $view = null)
{
$this->removeDecorator('form');
$content = parent::render($view);
return $content;
}
我认为这对你来说是一个更令人满意的解决方案,而不是单独为每个单独形式做。
答案 1 :(得分:0)
您正在Zend_Form内寻找Zend_Form_Decorator_Form。
$form->setDecorators(array(
'Form',
array(array('tag' => 'HtmlTag'), array('tag' => '')),
));
应该有用。