Урок 2: Основы MVC в Yii 2. Создание контроллера и представлений

На втором уроке мы изучим паттерн MVC (Model-View-Controller). Если вы успели пройти первый урок, то уже настроили окружение и создали базовое приложение. Если нет, не переживайте, вернётесь позже. А сейчас мы разберёмся, как Yii 2 структурирует код и создадим свой первый контроллер, представление и научимся передавать данные между ними.

Что такое MVC?

MVC это архитектурный паттерн, который разделяет приложение на три компонента:

  1. Модель (Model)
  2. Представление (View)
  3. Контроллер (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
<?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:

html
<h1>Добро пожаловать!</h1>
<p>Это главная страница моего первого приложения на Yii 2.</p>

Шаг 2: Создаём представление для страницы «О нас»

Создайте файл views/site/about.php:

html
<h1>О нас</h1>
<p>Мы команда энтузиастов, создающих крутые проекты на Yii 2.</p>

Важно!

  • Названия файлов представлений должны совпадать с названиями действий.
  • Папка views/site/ соответствует контроллеру SiteController.

Передача данных из контроллера в представление

Часто нужно передать данные из контроллера в представление. Например, динамический заголовок или список товаров.

Пример: Передаём заголовок и текст

Обновите действие actionAbout() в SiteController:

php
public function actionAbout()
{
    $title = "О нашей компании";
    $text = "Мы работаем с 2010 года и создаём современные веб-приложения.";
    
    return $this->render('about', [
        'title' => $title,
        'content' => $text
    ]);
}

Теперь обновите views/site/about.php:

html
<h1><?= $title ?></h1>
<p><?= $content ?></p>

Как это работает:

  • Второй аргумент метода render() это массив данных. Ключи массива (titlecontent) становятся переменными в представлении.

Практические задачи

Задача 1: Создайте контроллер «BlogController»

  • Добавьте действия actionIndex() (список постов) и actionPost($id) (просмотр одного поста).
  • Для actionPost() передайте в представление ID поста и заголовок.

Решение:

php
// 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:

html
<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». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.

Персональные рекомендации
Оставить комментарий