使用 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>