保持Zend_Form不会呈现<form>标记

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)

vas*_*ite 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());
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)

我认为这对你来说是一个更令人满意的解决方案,而不是单独为每个单独的形式做.