В этой записи, вы научитесь как создавать controller’ы, action’ы в Yii2 basic, как они работают и что нужно всегда помнить при их создании.
Эта запись относится к курсу Yii2 basic.
Словарь
Варианты того, как я буду называть некоторые слова в дальнейшем, что вы их правильно воспринимали. В дальнейшем, будет подробное описание каждого из них.
- controller — контроллер
- action — экшин
- view — шаблон
- model — модель
MVC
Model View Controller — модель, шаблон и контроллер. Я не буду углубляться и рассказывать о MVC, вы сами можете загуглить, материалов по этой теме достаточно и мне нет смысла обсасывать эту тему.
Я распишу, как MVC используется в Yii2.
- View — это, как правило HTML файлы, которые находятся в папке
views
и внутренняя структура зависит от названия контроллера. Допустим, если контроллер называетсяSiteController
, то берется часть доController
— «Site», меняется в нижний регистр, и, тем самым, путь до шаблонов этого контроллера становится —views/site
. - Controller — это класс, который указывает приложению «что нужно делать». С его помощью вы создаёте action’ны и каждый из них будет выводить нужный шаблон (HTML файл — view), но не всегда.
Например, RESTful и консольные контроллеры, которые не имеют view, так как оба выполняют другие функции в отличии от обычного контроллера. Но тема этой записи не об этом, поэтому упустим это.
Допустим, если вы сейчас зайдете на сайт http://yii.loc/site/login
, то можете заметить, что название ссылка состоит из контроллера — site
и action — login
.
Код этого контроллер вы можете найти в controllers/SiteController.php
— это стандартный контроллер, который идёт после установки Yii2 basic или advanced. Внутри будет action — actionLogin
, который отвечает за отображение страницы авторизации.
Controller, action, view на живом примере
Возьмем страницу site/login
и детальнее рассмотрим её.
Как я уже выше описывал, используется SiteController
, потому что site
— это название контроллера, а login
— название action.
Опять же, есть такие исключения как urlManager, в котором можно изменить правила отображения ссылок. То есть название ссылки может значительно или вовсе отличаться от настоящего имени контроллера и/или экшина.
Дальше заходим в файл SiteController
в папке controllers
и находим метод actionLogin()
, который отвечает за отображение страницы site/login
.
Выглядит этот метод следующим образом:
/** * Login action. * * @return Response|string */ public function actionLogin() { if (!Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } return $this->render('login', [ 'model' => $model, ]); }
Разбить этот его можно на три основных части.
Часть первая: проверяем если пользователь авторизован, то возвращаем его на главную страницу, тем самым не давая вернуться на страницу авторизации.
if (!Yii::$app->user->isGuest) { return $this->goHome(); }
Часть вторая: используем модель LoginForm()
для проверки полей, которые находятся в третьей части, когда action начинает рендерить (используя render()
метод) login.php
шаблон с данными из $model
. Строчка $model->load(Yii::$app->request->post()) && $model->login()
проверяет если ли $_POST
запрос связанный именно с формой авторизации и если «да», то логика if()
продолжается на методе login()
из LoginForm()
и если все успешно (логин и пароль верны и удалось создать сессию для пользователя), то его перекидывает на главную страницу и он становится авторизованным.
$model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); }
Часть третья: используем views/site/login.php
для вывода информации о странице. Но кроме вывода, туда пускаются еще данные о модели ('model' => $model
), которая будет использоваться для проверки полей формы авторизации.
return $this->render('login', [ 'model' => $model, ]);
Как правило, в каждом action есть модель, которая обрабатывает его, потом проверяется если запрос, например $_POST
и далее происходит какая-либо логика приложения и, конечно же, указывается имя шаблона, которое используется для отображения. В этой и заключается MVC в Yii2.
Читать далее — Yii2 basic: Создаем контроллер, форму, делаем валидацию, миграцию, сохраняем в базу