# Формы в Yii2 ## Как и зачем Формы - часто используемые способы ввода данных от пользователя в Веб. В обычном случае программист сам осуществляет верстку, валидацию и обработку данных из формы, однако несложно заметить, что форма по своей структуре часто пересекается с теми или иными структурами данных в коде, структурой СУБД и т. п. Поэтому во многих случаях создание форм можно автоматизировать, исходя из этой структуры ## `Model` Структура-контейнер для данных из формы называется *моделью*. Именно в этой структуре хранится информация о валидации, названии полей, пояснениях и так далее. ```php 50]`. Тип и длина - `['countOfHands', 'min' => 0, 'max' => 2]`. Тип, минимальное и максимальное значение. - `['someField', 'validateSomeField']` - валидатор в методе класса - `['even', function($attribute, $params, $validator){ if (($this->$attribute & 2) == 1){ $this->addError($attribute, "It's not even"); } }]` Валидатор с помощью коллбэк-функции. - `when` позволяет сделать условную валидацию, т. е. валидацию, которая работает или нет в зависимости от внешних условий. Так же есть возможность задавать **JS** код для валидации на клиенте. http://www.yiiframework.com/doc-2.0/guide-input-validation.html#inline-validators ### Имя правила валидации. Для удобства вы так же можете задавать правило, используя ассоциативный синтаксис массива: ```php ... 'password' => [['password'], 'string', 'max' => 60] ... ``` ## Работа с СУБД. Для того, что бы модель использовать с возможностью сохранения СУБД, следует использовать `ActiveRecord` в качестве предка вашей модели. `ActiveRecord`, в свою очередь, имеет в предках `Model`, таким образом работает прозрачно в качестве модели. ## Контроллер и ЭкшОн ```php public function actionForm() { $model = new SomeModel(); if ($model->load(Yii::$app->request->post()) && $model->validate()) { $model->save(); return $this->render('form-confirm', ['model' => $model]); } else { return $this->render('form', ['model' => $model]); } } ``` В примере выше в случае удачной валидации происходит сохранение модели, в случае же неудачи или первого захода - отображается форма ## View В базе **HTML** для формы формируется следующим образом: ```php = $form->field($model, 'login') ?> = $form->field($model, 'password') ?> = $form->field($model, 'email') ?> = $form->field($model, 'password')->passwordInput() ?>