如何在 ZF2 中启用显示全局标签取消 FormMultiCheckbox?

Posted

技术标签:

【中文标题】如何在 ZF2 中启用显示全局标签取消 FormMultiCheckbox?【英文标题】:How to enable displaying the global label unsing FormMultiCheckbox in ZF2? 【发布时间】:2016-08-25 13:27:29 【问题描述】:

我正在使用Zend\Form\Element\MultiCheckboxZend\Form\View\Helper\FormMultiCheckbox

MyFieldset.php

// namespace ...;
// use ....;
class MyFieldset extends Fieldset

    // ...
    public function init()
    
        parent::init();
        $this->add(
            [
                'type' => 'multi_checkbox',
                'name' => 'mymulticheckbox',
                'options' => [
                    'label' => _('global label'),
                    'label_attributes' => [
                        'class' => 'col-md-3',
                    ],
                    'value_options' => [
                        [
                            'value' => 'foo',
                            'label' => 'FOO',
                        ],
                        [
                            'value' => 'bar',
                            'label' => 'BAR',
                        ],
                        [
                            'value' => 'buz',
                            'label' => 'BUZ',
                        ],
                    ]
                ],
            ]
        );
    
    // ...

myform.phml

use Zend\Form\View\Helper\FormMultiCheckbox;
echo $this->formMultiCheckbox($myFieldset->get('mymulticheckbox'), FormMultiCheckbox::LABEL_PREPEND);

它可以工作,但“global label”没有显示。当我使用Zend\Form\View\Helper\FormElement 时,它会显示出来,但FormMultiCheckbox 似乎忽略了“全局label”。

如何让FormMultiCheckbox显示复选框列表的label

【问题讨论】:

【参考方案1】:

你试过formRow()。对我来说它有效。这似乎没有在formMultiCheckbox() 中进行管理。见行182-193,文件zend-form/src/View/Helper/FormRow.php

// Multicheckbox elements have to be handled differently as the html standard does not allow nested
// labels. The semantic way is to group them inside a fieldset
if ($type === 'multi_checkbox'
    || $type === 'radio'
    || $element instanceof MonthSelect
    || $element instanceof Captcha
) 
    $markup = sprintf(
        '<fieldset><legend>%s</legend>%s</fieldset>',
        $label,
        $elementString
    );

【讨论】:

感谢您的回答!是的,正如我在问题中所写,我已经使用 FormRow 视图助手进行了尝试。不幸的是,它有一个缺点,那就是标签位置无法按需要定义(formRow($field, 'prepend') 不适用于MultiCheckboxes)。最后,我通过手动完成所有操作来解决问题:'&lt;fieldset&gt;&lt;legend&gt;' . $this-&gt;translate($myFieldSet-&gt;get('mymulticheckbox')-&gt;getLabel()) . '&lt;/legend&gt;' . $this-&gt;formMultiCheckbox($myFieldSet-&gt;get('mymulticheckbox'), FormMultiCheckbox::LABEL_PREPEND) 这很丑,但它可以工作。 哦,是的,别无选择。

以上是关于如何在 ZF2 中启用显示全局标签取消 FormMultiCheckbox?的主要内容,如果未能解决你的问题,请参考以下文章

ZendDeveloperTools模块没有在ZF2 beta5中显示工具栏

未找到 ZF2 类 PDO,但在 php 配置中启用了 PDO

antd input组件及原生input标签取消自动显示历史记录

如何在调试时删除“转到实时可视树”/“启用选择”/“显示布局装饰”覆盖?

如何显示自定义警报以在 ios 中启用通知

怎样取消EXCEL中的宏保护