ZF2 Form \ Element \ MultiCheckbox:如何在新行上获取每个项目?

时间:2014-02-15 15:19:00

标签: zend-framework2 zend-form

我一直在谷歌搜索这个无济于事。我的一个表单中有一个多复选框表单元素。这是我用来创建它的代码:

$this->add(array (
    'name' => 'thingyId',
    'type' => 'MultiCheckbox',
    'options' => array (
        'value_options' => $thingyArray,
    )
));

在我的视图脚本中,我有这个:

<?= $this->formRow($form->get('thingyId')); ?>

表单元素显示正常,但所有复选框都在一行上。如何获取它以使每个复选框都在新行上?

2 个答案:

答案 0 :(得分:9)

如果您查看此link,则可以看到第四个参数是部分参数。因此,您可以使用许多方法来完成任务。

方法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; ?>

方法2

通过扩展默认帮助程序来创建自己的视图助手。

namespace Application\View\Helper;

class MyFormRow extends \Zend\Form\View\Helper\FormRow
{
       /**
        * @var string
        */
       protected $partial = 'template-file';
}

现在,请告知我们的应用程序我们的模块中的新助手

namespace Application;

class Module 
{
    public function getViewHelperConfig()
    {
        return array(
            'invokables' => array(
               'myFormRow' => 'Application\View\Helper\MyFormRow'
            )
        );
    }
}

最后使用帮助器:

echo $this->myFormRow($element);

答案 1 :(得分:0)

当我自己遇到这个问题时,我遇到了这个问题。正在使用的代码如下:

<?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中没有更清晰的方法来做这件事有点令人费解。如果有更好的方法可以做到这一点,我当然希望了解它。