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);
?>