zend-framework - 仅渲染 <form> 标签

标签 zend-framework zend-form

有什么方法可以只渲染开始<form> Zend_Form 对象的标签?

print $this->registerForm->renderForm();

渲染 <form></form> ,我只需要<form>

编辑:

在 Asleys 可能的解决方案之后,我为 My_Form 类编写了这个

public function renderFormOpen() {
    return str_replace('</form>', '', $this->renderForm());
}

public function renderFormClose() {
    return '</form>';
}

在查看 ZF 库中的代码之后,我仍然在寻找 ZF 的瘦身方式,尽管我认为没有任何方法。

最佳答案

可以编写一个自定义表单装饰器,它使用仅呈现打开表单标签的自定义 View 助手。但我认为这有点矫枉过正。
只需“硬编码”表单标签并使用 View 中表单变量提供的数据填充属性。

<!--in your view-template -->
<form action="<?php echo $this->form->getAction() ?>"
      enctype="<?php echo $this->form->getEnctype() ?>"
      method="<?php echo $this->form->getMethod() ?>"
      id="<?php echo $this->form->getId() ?>"
      class="<?php echo $this->form->getAttrib('class') ?>" >

    <!--in case your products are represented as elements -->
    <?php foreach ($this->form->getElements() as $element): ?>
       <?php echo $element ?>
    <?php endforeach; ?>

    <!--in case your products are represented as displayGroups -->
    <?php foreach ($this->form->getDisplayGroups() as $displayGroup): ?>
       <?php echo $displayGroup ?>
    <?php endforeach; ?>

    <!--in case your products are represented as subforms -->
    <?php foreach ($this->form->getSubforms() as $subform): ?>
       <?php echo $subform ?>
    <?php endforeach; ?>

    <!--in case your products are rendered by a view helper -->
    <?php foreach ($this->products as $product): ?>
       <?php echo $this->renderProduct($product) ?>
    <?php endforeach; ?>
</form>

只是为了好玩,矫枉过正

// Get your products form
$form = new Form_Products();
// Add custom prefix path
$form->addPrefixPath('Foobar_Form_Decorator', 'Foobar/Form/Decorator', 'decorator');
// Set OnlyOpenTagForm-ViewHelper for FormDecorator
$form->getDecorator('Form')->setHelper('OnlyOpenTagForm');

// copy Zend/View/Helper/Form to Foobar/Form/Decorato/OnlyOpenTagForm.php
// In OnlyOpenTagForm.php
//   replace Zend_View_Helper_Form with Foobar_View_Helper_OnlyOpenTagForm
//   replace method "form" with onlyOpenTagForm"
//   replace
if (false !== $content) {
    $xhtml .= $content
           .  '</form>';
}
//   with:        
if (false !== $content) {
    $xhtml .= $content;
}

完成! - Java-Guys 会喜欢的 ;)

关于zend-framework - 仅渲染 <form> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250681/

相关文章:

zend-framework - 使用 Doctrine ODM 将 Zend Framework 1.11 与 MongoDB 集成

zend-framework - 为什么 ZEND 到处使用接口(interface)和抽象类,而 Codeigniter 根本不使用它们?

php - 在 PHP 脚本中加载 Zend Framework 及其应用程序

zend-form - Zend Framework 2 翻译表单错误不起作用

php - 一旦表单对象已经创建,如何在特定位置添加 zend 表单元素?

mysql - Zend 框架 - 仅插入少于 500 行

zend-framework - 在Zend View Helper中处理错误

zend-framework - 自定义验证器在 Zend 中不起作用

php - 如何在编辑表单中使用 DoctrineModule\Validator\NoObjectExists - Zend Framework 2 & Doctrine 2

php - Zend 表单验证范围日期