ash*_*exm 2 php zend-framework zend-form
我有一个案例,其中UX/Designer设计了一个表单设计,要求我<form></form>在phtml模板中自己创建标签,而不是让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;
}
Run Code Online (Sandbox Code Playgroud)
如果我正确地读了你的问题,答案很简单: -
$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());
Run Code Online (Sandbox Code Playgroud)
给出以下输出: -
<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>
Run Code Online (Sandbox Code Playgroud)
即没有<form>标记呈现.我想这就是你需要的.
如果你想通过扩展自动在每个表单中执行此操作,Zend_Form然后重写render()方法如下工作: -
public function render(Zend_View_Interface $view = null)
{
$this->removeDecorator('form');
$content = parent::render($view);
return $content;
}
Run Code Online (Sandbox Code Playgroud)
我认为这对你来说是一个更令人满意的解决方案,而不是单独为每个单独的形式做.