От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы рассмотрим, как осуществляется регистрация пользователя в Yii2.
Для того, чтобы пользователь мог полноценно пользоваться сайтом, желательно предоставить ему личный кабинет и, соответственно, возможность авторизации. Ну а для того, чтобы работала авторизация, само собой, понадобится регистрация пользователя. В этом статье мы с вами начнем реализацию процесса регистрации в Yii.
Для начала нам потребуется таблица в БД. Пусть это будет таблица user. Вот запрос для создания этой таблицы:
1 2 3 4 5 6 7 8 |
CREATE TABLE IF NOT EXISTS `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `role` varchar(255) NOT NULL DEFAULT 'user', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Таблица очень проста и имеет всего четыре поля: id, username, password и role. В поля username и password мы будем записывать имя пользователя и его пароль. Поле role, которое по умолчанию имеет значение user, предназначено для записи роли пользователя, которого мы хотим добавить. Все просто.
Идем дальше. Следующим шагом будет создание модели, которая будет отвечать за форму регистрации. Назовем ее SignupForm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
namespace app\models; use yii\base\Model; class SignupForm extends Model{ public $username; public $password; public function rules() { return [ [['username', 'password'], 'required', 'message' => 'Заполните поле'], ]; } public function attributeLabels() { return [ 'username' => 'Логин', 'password' => 'Пароль', ]; } } |
Полагаю, здесь все понятно и особо объяснять нечего. На всякий случай напомню. Модель имеет 2 поля, которые и будут отвечать за соответствующие поля формы регистрации. Метод rules определяет правила валидации. Ну а метод attributeLabels устанавливаете названия полей для тега label формы.
Теперь добавим экшен в нужный нам контроллер. В созданном экшене получим объект модели и напишем еще несколько строк кода. Экшен actionSignup я помещу в контроллер SiteController.
1 2 3 4 5 6 7 8 |
public function actionSignup(){ if (!Yii::$app->user->isGuest) { return $this->goHome(); } $model = new SignupForm(); return $this->render('signup', compact('model')); } |
Суть данного кода также должна быть понятна. Вначале мы проверяем, не является ли пользователь уже авторизованным. Если пользователь авторизован, т.е. это не гость, тогда мы сделаем редирект на главную страницу сайта. В целом, данная проверка не является на самом деле обязательной, но как мне кажется, если пользователь авторизован, то показывать ему форму регистрации не обязательно.
Далее мы получаем объект модели и передаем его в представление signup. Давайте создадим такое представление.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; ?> <?php $form = ActiveForm::begin() ?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password')->passwordInput() ?> <div class="form-group"> <div> <?= Html::submitButton('Регистрация', ['class' => 'btn btn-success']) ?> </div> </div> <?php ActiveForm::end() ?> |
Осталось протестировать написанный код. Давайте обратимся по адресу //yii2/site/signup и проверим наличие формы на странице.
Супер! Форма имеется и ошибок нет. На этом мы пока остановимся и в следующей статье продолжим работать с регистрацией пользователей.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.