保持Zend_Form不会呈现<form>标签</form>

时间:2011-08-01 19:39:10

标签: php zend-framework zend-form

我有一个案例,其中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;
    }

2 个答案:

答案 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' => '')),
));

应该有用。