如何在 ZF2 表单元素后添加 "new line"?

How to add a "new line" after a ZF2 form element?

使用 ZF2 我试图在我的表单元素之间放置 <br> 或类似元素。据我所知,ZF1 有类似 "Decorators" 的内容,但在 ZF2 中已不存在。但是,ZF2 没有 $form->addBr() 元素,而这正是我需要的。

下面是我在视图中呈现表单的方式:

<?php echo $this->form($this->form);?>

这是我在控制器中准备 $form 的方法

    // Set up checkbox
    $checkbox = new Element\Checkbox('checkbox');
    $checkbox->setChecked(true);

    //Set up text
    $text = new Element\Text('text');
    $text->setLabel("Hi");
    $text->setValue(333);

    // Assemble Fielset
    $fieldset = new Fieldset("FS");
    $fieldset->setLabel("Label");

    $fieldset->add($checkbox);

    //NOTE:  I need a "NEW LINE" Here
    $fieldset->ADD_NEW_LINE();// no such method 


    $fieldset->add($text);

    // Assemble Form
    $form = new Form();
    $form->add($fieldset);

当前一期:

当我希望每个表单元素都在一个新行上时,表单元素呈现在一行上。

问题

当我想要 ZF2 一次性呈现整个表单时,就像我在这里尝试做的那样(最好不要查看逐行呈现表单的代码),我怎样才能做到这一点可以在新行上放置新的表单元素吗?

我对任何解决方案持开放态度——无论是程序化 ZF2 解决方案还是 CSS 解决方案(如果可能)或其他我还想不到的解决方案。我只是想让表单呈现出来,元素显示在新行上,而不是显示在一行上。

ZF2 渲染 HTML 像这样:

<fieldset>
  <legend>Legend</legend>
  <label><span>Check</span>
    <input name="name[checkbox]" value="0" type="hidden">
    <input name="name[checkbox]" value="1" checked="checked" type="checkbox">
  </label>

  <label><span>Value</span>
    <input name="name[text]" value="123" type="text">
  </label>
</fieldset>

您可以使用 CSS 或覆盖 formRow() 助手(form() 助手使用)来输出您想要的标记。

我创建了一个简单的模块,它覆盖了表单行助手以输出 div(带有适当的 类 样式):https://packagist.org/packages/tfountain/tf-form - 随意使用这个或复制方法并自定义适合您的需要。我的会给你这样的标记:

<div id="some_element" class="form-row form-row-text">
    <label><span>Value</span>
        <input name="name[text]" value="123" type="text">
    </label>
</div>

如果您想推出自己的类似解决方案,这是帮助代码:https://github.com/tfountain/tf-form/blob/master/src/TfForm/Form/View/Helper/FormRow.php

我能够做到这一点——基本上是复制的 ZF2's own mechanisms and got some help from this answer:

我删除了只会弄乱我的 FieldSet,然后使用循环循环遍历 Form 元素,在我想要的地方修改 <br/> - 在每个元素之后。就这么多了。

<?php
/**
 * inside view template
 *
 * @var $this \Zend\View\Renderer\PhpRenderer
 * @var $form \Zend\Form\Form
 */
$form = $this->form;
?>
<fieldset>
    <legend>Legend</legend>
    <?php
    echo $this->form()->openTag($form);
    foreach ($form as $element)
        $formContent .= $this->formrow($element) . "<br/>"; //note the "BR"

    echo $formContent;
    echo $this->form()->closeTag();

    ?>
</fieldset>