如何添加"新行"在ZF2表单元素之后?

时间:2016-02-23 21:11:31

标签: php css zend-framework2

使用ZF2我试图在我的表单元素之间放置<br>或类似的元素。 ZF1有类似于&#34;装饰者&#34;根据我的知识,它们不再是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:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

您可以使用CSS执行此操作或覆盖headerValue帮助程序(formRow()帮助程序使用)以输出所需的标记。

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

form()

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

答案 1 :(得分:0)

我能够实现这一目标 - 基本上复制了ZF2's own mechanisms并从这个答案中获得了一些帮助: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>