Формы в Yii

В прошлой статье был рассмотрен пример получения данных приложением через параметр в URL. В этот раз попробуем сделать полноценную форму и запрограммировать её обработчик.

Для реализации этой задачи помимо действия и представления понадобится модель.

Модель

Пусть у нас на сайте будет простая форма, которая принимает данные по двум полям: имени и мэйл адресу пользователя.

Сначала создадим файл модели. Он будет находиться по адресу 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, чтобы увидеть форму: Форма на фреймворке Yii Попробуйте начать ввод информации в поля. Валидация данных при вводе будет происходить через javascript автоматически. В случае правильного заполнения поля будут подсвечены зелёным. Отправьте форму, чтобы увидеть второе представление: Форма на фреймворке Yii
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх