Yii2 dropdownlist. Часть 1

Yii2 dropdownlist

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами поработаем с выпадающими списками формы и познакомимся с методом Yii2 dropdownlist, который и позволяет добавить для формы выпадающий список.

Итак, давайте поработаем с еще одним элементом формы – выпадающим списком select. До этого мы с вами работали преимущественно с текстовыми полями, однако, выпадающие списки также нередкий элемент форм. Например, при создании новости мы можем изначально ее не публиковать. Для этого вполне может потребоваться выпадающий список с двумя элементами: публиковать и не публиковать. Еще один классический пример – выбор категории статьи или новости. Если в первом варианте список мы могли бы заменить чекбоксом, то во втором случае этого не получится сделать, здесь нужен именно список.

Реализацией выпадающих полей формы занимается метод dropDownList. Метод предполагает один обязательный параметр — $items, который должен быть массивом, используемым для генерирования списка. Ключи массива будут использованы для значений select в коде HTML, ну а значения массива – текстовые элементы списка. Второй параметр метода dropDownList – массив опций $options – является необязательным.

Ну что же, давайте попробуем. Пусть у нас будут две сущности – посты и категории. Каждый пост принадлежит конкретной категории. Соответственно, в таблице статей у нас будет некоторое поле category_id, в которое будет записывать ID категории, к которой относится статья. Если мы сгенерируем через модуль Gii все необходимые компоненты приложения (модели и CRUD), то в итоге при редактировании поста мы получим следующую картину:

Yii2 dropdownlist

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее

В принципе, все будет работать, в соответствующее поле таблицы статей будет записан ID категории. Вот только это ни разу не удобно и не понятно для администратора сайта, поскольку при создании категорий он вводит конкретные их названия, а в поле предлагается записать какое-то Category ID. Вот здесь как раз и используем select.

Откроем нужное представление, найдем вывод интересующего нас поля:

<?= $form->field($model, 'category_id')->textInput(['maxlength' => true]) ?>

Удалим или закомментируем его, а вместо него вставим следующий код:

<?= $form->field($model, 'category_id')->dropDownList(
 \yii\helpers\ArrayHelper::map(\app\modules\admin\models\Category::find()->all(), 'id', 'name')
) ?>

И посмотрим на результат:

Yii2 dropdownlist

Все получилось. Теперь мы имеем выпадающий список. В качестве параметра мы передали результат работы метода ArrayHelper::map, который мы рассматривали в одной из предыдущих статей. Самому ArrayHelper::map мы передали одним из параметров результат обращения к модели. На самом деле обращение к модели из вида несколько противоречит паттерну MVC, поэтому, по-хорошему, неплохо было бы это сделать в конртроллере, а уже из него передать готовые данные в вид. Давайте так и сделаем.

Идем в контроллер постов, получаем категории и передаем их в представление:

public function actionUpdate($id)
{
 $model = $this->findModel($id);
 $cats = Category::find()->all();

 if ($model->load(Yii::$app->request->post()) && $model->save()) {
 return $this->redirect(['view', 'id' => $model->id]);
 } else {
 return $this->render('update', [
 'model' => $model,
 'cats' => $cats,
 ]);
 }
}

Из представления update.php пробросим данные в _form.php:

<?= $this->render('_form', [
 'model' => $model,
 'cats' => $cats,
]) ?>

И, наконец, в _form.php:

<?= $form->field($model, 'category_id')->dropDownList(
 \yii\helpers\ArrayHelper::map($cats, 'id', 'name')
) ?>

Если вы нигде не ошиблись, то результат не изменится. На этом пока остановимся и продолжим работу в следующей статье. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2. Быстрая разработка с современным фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree