Zend framework2 ZF2 Form\Element\MultiCheckbox:如何在新行上获取每个项目?
我一直在谷歌上搜索,但没有用。我的一个表单中有一个多复选框表单元素。下面是我用来创建它的代码:Zend framework2 ZF2 Form\Element\MultiCheckbox:如何在新行上获取每个项目?,zend-framework2,zend-form,Zend Framework2,Zend Form,我一直在谷歌上搜索,但没有用。我的一个表单中有一个多复选框表单元素。下面是我用来创建它的代码: $this->add(array ( 'name' => 'thingyId', 'type' => 'MultiCheckbox', 'options' => array ( 'value_options' => $thingyArray, ) )); 在我的视图脚本中,我有以下内容: <?= $this->
$this->add(array (
'name' => 'thingyId',
'type' => 'MultiCheckbox',
'options' => array (
'value_options' => $thingyArray,
)
));
在我的视图脚本中,我有以下内容:
<?= $this->formRow($form->get('thingyId')); ?>
表单元素显示良好,但所有复选框都在一行上。如何获得它,使每个复选框都位于新行上?如果查看此项,可以看到第四个参数是部分参数。因此,您可以使用多种方法来完成任务
方法1:
echo $this->formRow($element, null, null, 'template-file');
现在,创建一个名为template file.phtml
的模板文件,以任意方式渲染元素
//template-file.phtml
<span><?php echo $label; ?></span><br/>
<?php foreach ($element->getValueOptions() as $key => $value): ?>
<input type="checkbox" name="<?php echo $element->getName() ?>[]" value="<?php echo $value; ?>">
<span><?php echo $key; ?></span><br/>
<?php endforeach; ?>
现在,通知我们的应用程序您模块中的新助手
namespace Application;
class Module
{
public function getViewHelperConfig()
{
return array(
'invokables' => array(
'myFormRow' => 'Application\View\Helper\MyFormRow'
)
);
}
}
最后,使用帮助器:
echo $this->myFormRow($element);
我遇到这个问题时,我自己也有这个问题。正在使用的代码如下所示:
<?php
$oMultiCheckboxField = $oForm->get('multicheckboxelement');
echo $this->formMultiCheckbox($oMultiCheckboxField);
?>
您可以传递给formMultiCheckbox视图帮助器的唯一附加参数是是否附加或预先附加标签
我最终选择使用以下代码解决此问题:
<?php
$oMultiCheckboxField = $oForm->get('multicheckboxelement');
$oMultiCheckboxViewHelper = new \Zend\Form\View\Helper\FormMultiCheckbox();
$oMultiCheckboxViewHelper->setSeparator('<hr>');
echo $oMultiCheckboxViewHelper->render($oMultiCheckboxField);
?>
据我回忆,ZF1可以选择设置分隔符(我清楚地记得,至少对于单选按钮是这样)。为什么在ZF2中没有更清晰的方法来实现这一点有点令人费解。如果有更好的方法可以做到这一点,我当然想知道。我想我真正想问的是,是否有办法让每个项目自动显示在单独的一行上,就像在ZF1中一样?如果您在中查看教程,您将看到此页面上的表单在单独的行中包含所有复选框项,并且他不必创建自定义视图帮助器来执行此操作。那么我错过了什么?做一些简单得多的事情似乎有很多麻烦。谢谢。愚蠢的问题:我实际上把它放在一个单独的模块中,我称之为CustomFormView。我已经注册了新的视图等等,没有任何问题。我唯一的问题是把部分文件放在哪里。我将它放在module\CustomFormView\view\custom form view\multi-checkbox-element.phtml中,但应用程序找不到它。我应该将其保存到哪个目录?我认为您应该阅读有关查看模板路径堆栈和模板映射的内容。例如,如果
view
是模板路径堆栈,则在该目录下创建multi-checkbox-element.phtml
。或者,也可以为模板定义模板映射
<?php
$oMultiCheckboxField = $oForm->get('multicheckboxelement');
$oMultiCheckboxViewHelper = new \Zend\Form\View\Helper\FormMultiCheckbox();
$oMultiCheckboxViewHelper->setSeparator('<hr>');
echo $oMultiCheckboxViewHelper->render($oMultiCheckboxField);
?>