仅渲染<form>标记

Phl*_*lip 3 zend-framework zend-form

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

print $this->registerForm->renderForm();
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

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

public function renderFormClose() {
    return '</form>';
}
Run Code Online (Sandbox Code Playgroud)

仍然在寻找ZF的做法,即使我认为没有 - 在浏览ZF库中的代码之后.

Ben*_*mer 5

可以编写一个自定义的表单装饰器,它使用仅呈现打开的表单标记的自定义视图助手.但我认为这将是矫枉过正的.
只需"硬编码"表单标记,并使用视图中表单变量提供的数据填充属性.

<!--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>
Run Code Online (Sandbox Code Playgroud)

只是为了好玩的过度杀戮方式

// 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;
}
Run Code Online (Sandbox Code Playgroud)

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


Ted*_*Ort 5

您可以通过将 false 传递给表单装饰器来仅呈现打开的表单标签,如下所示:

<?php echo $this->form->renderForm(false) ?>
Run Code Online (Sandbox Code Playgroud)

这将输出如下内容:

<form id="post" enctype="multipart/form-data" method="post" action="/post">
Run Code Online (Sandbox Code Playgroud)

此外,您可以将字符串传递给表单装饰器,以将其包含在表单标签中,如下所示:

<?php echo $this->form->renderForm('Some Text') ?>
Run Code Online (Sandbox Code Playgroud)

输出类似于:

<form id="post" enctype="multipart/form-data" method="post" action="/simchas/post">Some Text</form>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...