От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой и следующих статьях мы подробнее рассмотрим работу с виджетом Yii2 ActiveForm. В частности, мы узнаем о различных методах, позволяющих отрисовать форму и ее поля – это методы begin, field, checkbox и другие.
Как вы помните, с формами мы уже работали в предыдущих статьях: создавали свою форму, принимали из нее данные, добавляли форму в модальное окно и т.д. Напомню, что для создания формы нам потребуются следующие вещи: модель формы, action контроллера, который будет передавать эту модель в представление и принимать данные формы, ну и само представление, в котором форма будет отрисована.
Для показа формы используется виджет yii\widgets\ActiveForm. Также часто для работы с дополнительными элементами формы (например, кнопка отправки формы) используется хэлпер yii\helpers\Html. В данной статье нас в первую очередь интересуют методы виджета ActiveForm, с которыми мы и будем работать.
Для работы давайте создадим форму авторизации, в которой будет поле для ввода логина типа text, поле для ввода пароля типа password и поле типа checkbox для запоминания авторизованного пользователя. К слову, полноценный пример создания такой формы в Yii2 уже есть из коробки сразу после установки. Мы создадим свой, немного упрощенный пример.
Давайте создадим модель формы – TestForm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace app\models; use yii\base\Model; class TestForm extends Model { public $username; public $password; public $rememberMe = true; public function rules() { return [ [['username', 'password'], 'required'], ['rememberMe', 'boolean'], ]; } } |
В ней мы объявили в виде свойств модели будущие поля. Также прописали правила валидации, в которых поля username и password являются обязательными, а поле rememberMe может принимать только булево значение, т.е. отвечает за переключатель (чекбокс).
Теперь получим объект класса в действии контроллера – SiteController::actionTest.
1 2 3 4 |
public function actionTest(){ $model = new TestForm(); return $this->render('test', compact('model')); } |
Ну и, наконец, создадим вид test в папке контроллера views\site.
1 2 3 4 5 6 |
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; var_dump($model); |
В виде мы пока что в целях тестирования распечатали объект модели и, соответственно, увидим его свойства на экране при обращении к странице.
Хорошо, модель доступна и теперь мы готовы к выводу самой формы. Для этого мы должны воспользоваться для начала парой ключевых методов класса ActiveForm – это методы begin и end, которые указывают на начало и конец формы. Весь код между ними, соответственно, будет генерировать уже поля формы. Также метод begin создаст экземпляр формы, который мы используем для создания полей.
1 2 3 |
<?php $form = ActiveForm::begin(); ?> <?php ActiveForm::end(); ?> |
Если теперь обновить страницу в браузере и посмотреть ее исходный код, то в нем мы должны обнаружить код пустой пока что формы.
Как видим, форма имеет несколько атрибутов по умолчанию, которые нам могут быть интересны: id, action, method. Значения этих и других атрибутов можно изменить, передав массив параметров в метод begin. Давайте попробуем:
1 2 3 4 5 6 7 8 |
<?php $form = ActiveForm::begin([ 'id' => 'test-form', 'action' => '/site/login', 'options' => [ 'class' => 'form-inline', 'enctype' => 'multipart/form-data' ] ]); ?> |
Итак, мы переопределили идентификатор формы и ее action. Также дополнительно в массиве options передали дополнительные настройки формы: класс и атрибут enctype, который позволит передавать через форму файлы при необходимости. Такой необходимости у нас сейчас нет, и данный атрибут я указал просто для примера. К слову, в последних версиях фреймворка данный атрибут вовсе не обязателен, Yii сам поставит его, если в форме будет поле для загрузки файла. В результате мы получим примерно такую картину:
Точно таким же образом мы при необходимости можем изменить и метод передачи данных с post на get, передав его параметром массива в метод begin. В следующей статье мы продолжим знакомство с методами ActiveForm, создавая необходимые нам поля. Ну а пока все.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.
Комментарии (3)