@VitaliyKaliuzhyn

Переопределение radioList yii2?

есть форма
<?=$form->field($model,'created_at')->radioList(['Radio 1', 'Radio 2', 'Radio 3'],['class'=>'mt-radio-list', 'itemOptions'=>['labelOptions'=>['class'=>'mt-radio mt-radio-list-outline']], 'item'=>function($label, $name){return "<label class='mt-radio mt-radio-outline'>$name<input type='radio' value='1' name='optionsRadios'> <span></span></label>";}]); ?>

но она слишком громоздкая. Есть переопределенный мною метод radioList()

public function radioList($items, $options = [])
{
    $this->adjustLabelFor($options);
    $this->errorOptions = array_merge(['tag' => 'span'], $this->errorOptions);
    $this->parts['{input}'] = Html::activeRadioList($this->model, $this->attribute, $items, $options);
    return $this;
}


как мне 'item' определить не в самой форме, а в методе radioList()
  • Вопрос задан
  • 872 просмотра
Решения вопроса 1
@VitaliyKaliuzhyn Автор вопроса
У меня есть мой ActiveField в котором я работаю, но вопрос остается открытым, как мне 'item'=>function() определить в методе, что бы при передаче параметров типа myRadioLis(['1','Radio']) выводился мой шаблон ?
То есть мне необходимо что бы для каждого параметра был вот такой вывод
<div class=""><label>Radio <input type="radio"><span></span></label></div>


Вот нашел решение, кому будет интересно
вместо
return $this;
делаем
return Html::beginTag('label') .
                Html::Tag('input','',$options).
                Html::beginTag('span') .
                Html::endTag('span') .
                Html::endTag('label');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Есть случаи, когда проще просто html прописать, чем использовать ActiveField
Но не понимаю чем смущает Вас громоздкость? Читал доки и т.д. Нет нигде ограничения по длине строчки кода.
Но можно написать свой ActiveField и создать там метод myRadioList и вынести все туда. Будет только:
<?=$form->field($model,'created_at')->myRadioList()?>

А можно виджет сделать, будет:
<?=$form->field($model,'created_at')->myRadioWidget()?>
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
если правильно понял вопрос, в самом простой реализации как-то так:
public function radioList($items, $options = [])
{
    if (key_exists('item', $options) === false) {
        $options['item'] = function($label, $name){
            return "<label class='mt-radio mt-radio-outline'>$name<input type='radio' value='1' name='optionsRadios'> <span></span></label>"
        }
    }
    return parent::__radioList($items, $options);

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы