0

Я использую Zend\Form\Element\MultiCheckbox с Zend\Form\View\Helper\FormMultiCheckbox:Как включить отображение глобальной метки, не содержащей FormMultiCheckbox в ZF2?

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 из списка флажка?

ответ

0

Вы пытались с 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 
    ); 
+0

Спасибо за ваш ответ! Да, как я писал в своем вопросе, я уже пробовал его с помощью помощника вида FormRow. К сожалению, это имеет недостаток, что тогда позиция метки не может быть определена как желаемая ('formRow ($ field, 'preend')' не работает для 'MultiCheckbox'es). В конце я обходился, делая все вручную: ''

'. $ this-> translate ($ myFieldSet-> get ('mymulticheckbox') -> getLabel()). ''. $ this-> formMultiCheckbox ($ myFieldSet-> get ('mymulticheckbox'), FormMultiCheckbox :: LABEL_PREPEND) 'Это уродливо, но оно работает. – automatix

+0

О да, нет другой альтернативы. –

Смежные вопросы