Zend Form Radio По умолчанию проверено - PullRequest
4 голосов
/ 07 сентября 2010

У меня есть следующая группа переключателей:

$enabled = $this->createElement('radio', 'enabled')
                ->setLabel('Enabled')
                ->setMultiOptions(array('1'=>'yes', '0'=>'no'))
                ->setValue($rank_values['enabled'])
                ->setAttrib('id', 'enabled')
                ->setAttrib('class', $action . '_enabled')
                ->setSeparator('');

Как мне установить проверенное радио? Теперь, когда я открываю свой скрипт, там не выбирается радио. Я хочу выбрать «да». Как?

Спасибо.

Ответы [ 6 ]

7 голосов
/ 22 мая 2014

В случае, если кому-то интересно, я использую нотацию массива для объявления всех моих элементов в моих формах, а в Zend Framework 2 для выбора опции по умолчанию в радиокнопке, вам нужно добавить значение атрибута и сделать так, чтобы он имел ключ значения_опции, который вы хотите выбрать по умолчанию:

// Inside your constructor or init method for your form //
$this->add(
        [
            'type'       => 'Radio',
            'name'       => 'some_radio',
            'options'    => [
                'value_options' => [
                    'opt1' => 'Radio option 1',
                    'opt2' => 'Radio option 2'
                ]
            ],
            'attributes' => [
                'value' => 'opt1' // This set the opt 1 as selected when form is rendered
            ]
        ]
    );

Я нашел некоторые примеры немного запутанными, потому что они использовали числовые ключи в опциях значения (0, 1), поэтому, когда я увидел 'значение' => 1, для меня не было очевидно, что это был ключ в value_options массив. Надеюсь, это кому-нибудь поможет.

7 голосов
/ 07 сентября 2010

намного проще:)

$enabled = $this->createElement('radio', 'enabled')
                ->setLabel('Enabled')
                ->setMultiOptions(array('1'=>'yes', '0'=>'no'))
                ->setValue($rank_values['enabled'])
                ->setAttrib('id', 'enabled')
                ->setAttrib('class', $action . '_enabled')
                ->setSeparator('')
                ->setValue("1");
3 голосов
/ 21 февраля 2016

Согласно руководству, вы бы сделали это так, если бы использовали обозначение массива: ссылка на руководство

 $this->add(
        [
            'name'       => 'someRadioMethod',
            'type'       => 'radio',
            'options' => [
                'label' => 'Some descriptive label',
                'value_options' => [
                    [
                        'value' => '1',
                        'label' => 'Label for 1',
                        'selected' => true,

                    ],
                    [
                        'value' => '2',
                        'label' => 'Label for 2',
                        'selected' => false,

                    ]
                ],
            ],
        ]
    );
3 голосов
/ 07 сентября 2010

Используйте это:

->setAttrib("checked","checked")

Чтобы ваш полный код выглядел так:

$enabled = $this->createElement('radio', 'enabled')
            ->setLabel('Enabled')
            ->setMultiOptions(array('0'=>'no', '1'=>'yes'))
            ->setAttrib("checked","checked")
            ->setValue($rank_values['enabled'])
            ->setAttrib('id', 'enabled')
            ->setAttrib('class', $action . '_enabled')
            ->setSeparator('');

[РЕДАКТИРОВАТЬ] Использование setValue:

Вы также можете использовать это:

->setValue('1')

Это проверит параметр, представленный значением 1, равным yes.

1 голос
/ 07 октября 2010

Я обнаружил, что если у вас есть набор фильтров, то ->setvalue('X') не работает.

Я удалил ->addFilter('StringToLower')
и добавил ->setSeparator('')->setValue('N');

работал лакомством

0 голосов
/ 07 сентября 2010

Да. Я решил это с помощью jQuery:

jQuery(document).ready(function(){
    var $radios = $('input:radio[name=enabled]');
    if($radios.is(':checked') === false) {
        $radios.filter('[value=1]').attr('checked', true);
    }
});
...