Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

Лучшие практики работы с dropDownList в Yii framework 2

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

  • 2017-01-04 20:11:24