Для реализации этой задачи помимо действия и представления понадобится модель.
Модель
Пусть у нас на сайте будет простая форма, которая принимает данные по двум полям: имени и мэйл адресу пользователя.Сначала создадим файл модели. Он будет находиться по адресу
models/MouseForm.php
. В нём будут обрабатываться данные, введённые пользователем в форму. Содержание этого файла будет таким:
<?php
namespace app\models;
use yii\base\Model;
class MouseForm extends Model{
public $name;
public $email;
public function rules() {
return [
// указываются обязательные поля:
[['name', 'email'], 'required'],
// валидация данных по паттерну:
['email', 'email'],
];
}
}
Наш класс расширяет стандартную "Model" Yii, которая сделана как раз для работы с данными форм. В единственном метода "rule" принимаемые данные имени и мэйла пользователя проходят проверку на обязательность заполнения, а почтовый адрес ещё проверяется на валидность.
Представление
Для нашего приложения потребуется сразу два представления. Одно будет отвечать за вывод формы с полями для ввода информации. А второе будет страницей, куда попадёт пользователь после отправки формы.Сначала сделаем саму форму. Для этого создадим новый файл по адресу
views/site/form.php
и запишем в него следующий код:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= Html::submitButton('Отправить') ?>
<?php ActiveForm::end(); ?>
Построение формы делается с помощью так называемого "виджета" ActiveForm. Метод "begin" распечатывает открывающийся тег формы, а "end" закрывает его. Поля формы выводятся с помощью метода "field", которой передаётся экземпляр модели. Последнее содержимое формы - это кнопка "Отправить", которая выводится на страницу с помощью метода "submitButton".Теперь сделаем файл представления
views/site/form-result.php
с поздравлением об успешной отправке формы. В нём будет содержаться такой код:
<?php
use yii\helpers\Html;
?>
<h1>Мы успешно получили информацию:</h1>
<div>Имя: <?= Html::encode($model->name) ?></div>
<div>Почта: <?= Html::encode($model->email) ?></div>
Не забываем про то, что вся принимаемая от пользователей информация должна быть обеззаражена. А если требуется вывести её на экран после отправки формы, то следует преобразовать HTML сущности с помощью "Html::encode".
Действие
Теперь можно сделать действие контроллере сайта. Напомним, что мы используем файлcontrollers/SiteController.php
из стандартного примера "basic", дополняя его новыми методами. Сначала добавим строчку до определения класса "SiteController", чтобы подключить файл нашей модели модель "MouseForm":
use app\models\MouseForm;
Теперь сделаем метод "actionMouse" в классе "SiteController":
public function actionMouse(){
$model = new MouseForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// данные прошли проверку
// показываем сообщение об успешном получении
return $this->render('form-result', ['model' => $model]);
} else {
// показываем форму для ввода данных
return $this->render('form', ['model' => $model]);
}
}
Всё готово для тестирования нашей формы. Теперь необходимо зайти на страницу /index.php?r=site/mouse
, чтобы увидеть форму:

