На втором уроке мы изучим паттерн MVC (Model-View-Controller). Если вы успели пройти первый урок, то уже настроили окружение и создали базовое приложение. Если нет, не переживайте, вернётесь позже. А сейчас мы разберёмся, как Yii 2 структурирует код и создадим свой первый контроллер, представление и научимся передавать данные между ними.
Что такое MVC?
MVC это архитектурный паттерн, который разделяет приложение на три компонента:
- Модель (Model)
- Представление (View)
- Контроллер (Controller)
Давайте разберём каждый «кирпичик» на примере интернет-магазина.
1. Модель (Model)
Модель это данные и бизнес-логика. Она работает с базой данных, валидирует информацию и реализует правила приложения.
Пример:
Если пользователь добавляет товар в корзину, модель:
- Проверяет, есть ли товар в наличии.
- Обновляет количество товара в БД.
- Рассчитывает итоговую стоимость заказа.
В Yii 2 модели наследуются от yii\base\Model или yii\db\ActiveRecord (если работают с БД).
2. Представление (View)
Представление это визуальная часть. Оно отвечает за отображение данных пользователю (HTML, CSS, JavaScript).
Пример:
Страница корзины показывает список товаров, их цены и общую сумму. Представление получает эти данные от контроллера и рендерит их в HTML.
В Yii 2 представления это PHP-файлы в папке views/контроллер/действие.php.
3. Контроллер (Controller)
Контроллер это посредник между моделью и представлением. Он обрабатывает запросы пользователя, взаимодействует с моделью и выбирает, какое представление отобразить.
Пример:
Когда пользователь нажимает «Оформить заказ», контроллер:
- Получает данные из формы.
- Передаёт их модели для обработки.
- Перенаправляет на страницу успешного заказа или показывает ошибку.
В Yii 2 контроллеры наследуются от yii\web\Controller.
Создаём первый контроллер
Давайте перейдём к практике. Создадим контроллер SiteController, который будет отвечать за страницы сайта: главную, о нас, контакты.
Шаг 1: Создание файла контроллера
В Yii 2 контроллеры хранятся в папке controllers/. Создайте файл SiteController.php со следующим содержимым:
<?php
namespace app\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionIndex()
{
return $this->render('index'); // Рендерим представление views/site/index.php
}
public function actionAbout()
{
return $this->render('about'); // Рендерим представление views/site/about.php
}
}
Пояснение:
actionIndex()действие по умолчанию для главной страницы.actionAbout()действие для страницы «О нас».- Метод
render()ищет файл представления в папкеviews/название-контроллера/.
Шаг 2: Проверяем работу
Откройте в браузере:
http://localhost:8080/index.php?r=site/indexглавная страница.http://localhost:8080/index.php?r=site/aboutстраница «О нас».
Если видите ошибку, то проверьте правильно ли указаны названия действий и файлов.
Работа с представлениями
Представления в Yii 2 это PHP-файлы, которые генерируют HTML. Давайте создадим два представления для наших действий.
Шаг 1: Создаём представление для главной страницы
Создайте файл views/site/index.php:
<h1>Добро пожаловать!</h1> <p>Это главная страница моего первого приложения на Yii 2.</p>
Шаг 2: Создаём представление для страницы «О нас»
Создайте файл views/site/about.php:
<h1>О нас</h1> <p>Мы команда энтузиастов, создающих крутые проекты на Yii 2.</p>
Важно!
- Названия файлов представлений должны совпадать с названиями действий.
- Папка
views/site/соответствует контроллеруSiteController.
Передача данных из контроллера в представление
Часто нужно передать данные из контроллера в представление. Например, динамический заголовок или список товаров.
Пример: Передаём заголовок и текст
Обновите действие actionAbout() в SiteController:
public function actionAbout() { $title = "О нашей компании"; $text = "Мы работаем с 2010 года и создаём современные веб-приложения."; return $this->render('about', [ 'title' => $title, 'content' => $text ]); }
Теперь обновите views/site/about.php:
<h1><?= $title ?></h1> <p><?= $content ?></p>
Как это работает:
- Второй аргумент метода
render()это массив данных. Ключи массива (title,content) становятся переменными в представлении.
Практические задачи
Задача 1: Создайте контроллер «BlogController»
- Добавьте действия
actionIndex()(список постов) иactionPost($id)(просмотр одного поста). - Для
actionPost()передайте в представление ID поста и заголовок.
Решение:
// controllers/BlogController.php namespace app\controllers; use yii\web\Controller; class BlogController extends Controller { public function actionIndex() { return $this->render('index'); } public function actionPost($id) { $postTitle = "Пост #$id"; // Заглушка для примера return $this->render('post', [ 'id' => $id, 'title' => $postTitle ]); } }
Задача 2: Добавьте представление для страницы поста
Создайте views/blog/post.php:
<h1><?= $title ?></h1> <p>ID поста: <?= $id ?></p>
Проверьте результат по адресу: http://localhost:8080/index.php?r=blog/post&id=5.
Итоги 2-го урока
- Узнали, как работает паттерн MVC.
- Создали свой первый контроллер и представления.
- Научились передавать данные из контроллера в представление.
В следующих уроках мы подключим базу данных и поработаем с моделями. Полный курс с уроками по Yii 2 для начинающих по ссылке: https://max-gabov.ru/yii-2-dlya-nachinaushih
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


