使用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:
<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;
答案 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>