Лучшие практики работы с dropDownList в Yii framework 2
Сегодня хочу рассказать про некоторые фишки и распространенные ошибки при работе с dropDownList в Yii2.
Надпись по умолчанию
Довольно часто можно встретить следующий код, который добавляет нулевое значение с "призывом к действию" в список значений
Html::dropDownList( 'test', null, ArrayHelper::merge([0 => 'Select an item', $items]) )
Я и сам так делал, но есть решение данной задачи без использования слияние массивов и прочих телодвижений:
Html::dropDownList( 'test', null, $items, [ 'prompt' => 'Select an item', ] )
Значения из модели
Это еще один случай неоправданного нагромождения логики для решения весьма тривиальной задачи. Думаю, вы встречали подобный код:
$cats = Category::find() ->where(['is_active' => 1]) ->all(); $items = ArrayHelper::map($cats, 'id', 'name');
Тут, конечно, больше о незнании ActiveQuery, но встречается подобный код зачастую при формировании списка значений. И легким движением руки код преобразуется в
$items = Category::find() ->select(['name', 'id']) ->where(['is_active' => 1]) ->indexBy('id') ->column();
Атрибуты option-ов для dropDownList в Yii2
Возникают задачи, когда необходимо изменять данные на странице в зависимости от выбранной опции dropDownList-а. Есть ряд решений этой задачи. Самый простой - добавить произвольные атрибуты для option.
Для этого необходимо передать в массив options
с ключом options
подмассив атрибутов для каждого элемента, а в качестве ключа каждого подмассива должно быть указано значение соответствующего опшена. Легче всего понять это на примере:
Html::dropDownList( 'test', null, [ 'first-key' => 'The first', '2nd' => 'The second', ], [ 'options' => [ 'first-key' => [ 'data-group-id' => 3, 'disabled' => true, ], '2nd' => [ 'data-group-id' => 1, ], ], ] )
На этом все. Список, конечно, не полный, но это топ3.