【问题标题】:Keeping Zend_Form from Rendering <form> tag防止 Zend_Form 渲染 <form> 标签
【发布时间】:2011-08-01 19:39:09
【问题描述】:

我有一个案例,其中 UX/Designer 布置了一个表单设计,需要我在 phtml 模板中自己创建 &lt;form&gt;&lt;/form&gt; 标签,而不是让 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;
    }

【问题讨论】:

  • 您是否有可能解决了错误的问题?也许解释一下为什么必须手动创建
    标签会很有用?
  • 显示标记在图形上比简单地从表单中吐出更复杂。有一部分按钮以某种方式包装,等等等等。它归结为创建一堆自定义装饰器,创建一堆自定义元素,或者删除表单标签并创建一堆标记手(除了按钮之外都是静态的,不是输入元素)。
  • 如果您能够发布表单的完整 HTML 示例,那么有人可能会提供解决方案。
  • 表单的 HTML 无关紧要。我只需要删除包装&lt;form&gt;&lt;/form&gt; 标签。它里面的东西并没有改变这一点。

标签: php zend-framework zend-form


【解决方案1】:

如果我没看错你的问题,答案很简单:-

$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>

即没有&lt;form&gt;标签呈现。我认为这就是你所需要的。

如果您想通过扩展Zend_Form 自动在每种形式中执行此操作,则可以按如下方式覆盖render() 方法:-

public function render(Zend_View_Interface $view = null) 
{
    $this->removeDecorator('form');
    $content = parent::render($view);
    return $content;
}

我想这对你来说是一个比单独为每个表单单独做更令人满意的解决方案。

【讨论】:

    【解决方案2】:

    您正在Zend_Form 中寻找 Zend_Form_Decorator_Form。

    $form->setDecorators(array(
        'Form',
        array(array('tag' => 'HtmlTag'), array('tag' => '')),
    ));
    

    应该可以。

    【讨论】:

    • 您的代码最终呈现为:&lt;&gt;&lt;form id="edit_user_form" enctype="application/x-www-form-urlencoded" action="/admin/edit-user" method="post"&gt;&lt;/form&gt;&lt;/&gt;
    • 它会删除所有输入标签并且显示&lt;form&gt;&lt;/form&gt;标签。我用 removeDecorator、addDecorator 尝试了类似的东西,但没有得到爱,所以我决定求助于字符串操作。
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2023-03-11
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多