如何在 ZF2 表单元素后添加“新行”


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

使用 ZF2,我试图在我的表单元素之间放置<br>或类似的元素。 ZF1 有类似"装饰器"的东西,据我所知,它们不再在 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自己的机制,并从这个答案中获得了一些帮助:https://stackoverflow.com/a/15827116/2883328

我删除了只会弄乱我的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>