Лучшие практики работы с 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.
