Фреймворк yii2 предоставляет множество полезных функций для генерации HTML кода, одна из таких — dropdownlist. Данная функция принадлежит классу HTML и используется в представлениях для отображения выпадающего списка:
Прежде чем использовать метод dropdownlist необходимо в начале файла, нашего представления объявить класс HTML:
Сейчас существует два способа использования данной функции:
- Через экземпляр класс ActiveForm
- Непосредственно через статичный класс HTML
Я предпочитаю пользоваться вторым способом в виду его краткости, но мы рассмотрим оба варианта. Для объекта ActiveForm код будет выглядеть следующим образом:
В данном коде, мы через метод field, класса ActiveForm, задаем модель и вызываем функцию dropDownList. Давайте сразу же рассмотрим второй вариант, а потом поговорим про параметры данной функции.
Как видно оба способа не сильно отличаются.
Аргументы в dropdownlist
Функция dropdownlist принимает 4 аргумента если объявлена через класс HTML и 2 если объявлена через класс ActiveForm, так как в данном случае первые два параметра устанавливаются из функции field. Рассмотрим все 4 аргумента:
- $name — имя поля формы, которое устанавливается для дальнейшей обработки запроса на сервере. В примере выше видно строку — name=»cat», это значение и устанавливает данный параметр.
- $selected — второй параметр служит для определения значения по умолчанию, то есть присваивает определенному полю option значение selected. Но применение данного свойства различается для способа использования dropdownlist по этому мы рассмотри его подробнее ниже.
- $items — принимает одномерный массив из которого генерирует поля option, где value — ключи массива, а содержимое между тегами — значение ключей массива. Так же рассмотрим этот параметр подробнее.
- $options (не обязательный аргумент) — массив с параметрами. Подробнее здесь.
Значения в dropdownlist
Третий аргумент $items определяет какие будут значения в нашем списке. Чаще всего вместе с dropdownlist используется функция map() класса ArrayHelper для того чтобы модель класса ActiveRecord преобразовать в необходимый массив. Например:
Здесь переменная $cat является экземпляром класса ActiveRecord, а параметры id и name задают ключ и значение массива. Ключи могут быть как числовыми так и строковыми. В результате в переменной $items у меня находиться такой массив:
Либо в ручную создадим массив:
Применим его в наш dropdownlist:
В результате получиться такой html код:
Параметр selected в dropdownlist
В случае использования dropdownlist через класс Html мы можем задать selected через второй аргумент, указав value необходимого значения. Например такой код:
Вернет такой html:
Как видно для option с value=10 устанавливается атрибут selected.
Для того что бы установить значение по умолчанию, в случае использования dropdownlist через класс ActiveForm необходимо воспользоваться 4 аргументов $options. Создадим наш массив с опциями:
Первый ключ массива — options позволяет задавать настройки для определенных элементов списка, принимая в качестве значения вложенный массив с ключом value определенного options. И во вложенном массиву устанавливаем ключ с значением Selected равным true. Применим наши опции:
Результат будет таким же как и в первом случае.