Если вы хотите быстро запустить свой блог и при этом не изобретать велосипед, Yii2 — отличный выбор. Этот фреймворк дружелюбен к новичкам, но при этом даёт мощные инструменты. В этой статье мы шаг за шагом создадим простой блог: установим Yii2, настроим базу данных, сделаем CRUD для постов и выведем их на главную. Всё будет максимально просто и без лишней магии.

Почему Yii2 подходит для блога

Yii2 — это PHP-фреймворк, который работает по принципу «всё включено». У него есть встроенный генератор CRUD, миграции для базы данных, удобный шаблонизатор и много готовых расширений. Вам не придётся писать всё с нуля. Блог на Yii2 можно сделать за вечер, если следовать чёткому плану.

Правило: Если вы только начинаете, не пытайтесь сразу сделать сложный движок. Сделайте минимальный функционал — список постов, создание, редактирование и удаление. Потом можно добавлять комментарии, теги и поиск.

Установка Yii2 и настройка окружения

Для начала вам понадобится веб-сервер (Apache или Nginx), PHP 7.4 или выше и Composer — менеджер пакетов для PHP. Если у вас нет локального сервера, используйте OpenServer, XAMPP или Docker.

Откройте терминал и выполните команду для создания проекта:

composer create-project --prefer-dist yiisoft/yii2-app-basic blog

Эта команда скачает Yii2 в папку blog. После установки перейдите в папку проекта и настройте файл config/web.php. В нём нужно указать имя базы данных, пользователя и пароль. Пример подключения к MySQL:

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=blog_db',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
],

Не забудьте создать базу данных blog_db в MySQL. Теперь можно запустить встроенный сервер Yii2 для проверки:

php yii serve

Откройте браузер по адресу http://localhost:8080 — вы увидите стартовую страницу Yii2.

Создание базы данных и миграции

Чтобы не писать SQL-запросы вручную, используем миграции. Yii2 позволяет описывать изменения базы данных в виде классов. Создадим миграцию для таблицы post:

php yii migrate/create create_post_table

В папке migrations появится файл. Отредактируем его, добавив поля:

use yii\db\Migration;

class m250101_000001_create_post_table extends Migration
{
    public function safeUp()
    {
        $this->createTable('post', [
            'id' => $this->primaryKey(),
            'title' => $this->string(255)->notNull(),
            'content' => $this->text()->notNull(),
            'created_at' => $this->integer()->notNull(),
            'updated_at' => $this->integer()->notNull(),
        ]);
    }

    public function safeDown()
    {
        $this->dropTable('post');
    }
}

Теперь запустите миграцию:

php yii migrate

Таблица создана. Поле created_at и updated_at будут хранить временные метки в формате Unix timestamp. Это удобно для сортировки.

ПолеТипОписание
idINT (primary key)Уникальный идентификатор поста
titleVARCHAR(255)Заголовок поста
contentTEXTСодержимое поста
created_atINTEGER (timestamp)Дата создания
updated_atINTEGER (timestamp)Дата обновления

Генерация модели, контроллера и представлений

Yii2 умеет создавать код автоматически через Gii — веб-интерфейс генератора. Откройте http://localhost:8080/index.php?r=gii. Введите имя модели: Post, выберите таблицу post и нажмите «Preview», затем «Generate». То же самое сделайте для контроллера и представлений. Gii создаст папки: models/Post.php, controllers/PostController.php и views/post/.

Теперь у нас есть готовый CRUD. Можно проверить: перейдите по адресу http://localhost:8080/index.php?r=post. Вы увидите список постов (пока пустой), кнопку «Create Post» и возможность создавать, редактировать и удалять записи.

Вывод постов на главную страницу

По умолчанию главная страница показывает стартовую страницу Yii2. Мы сделаем так, чтобы на ней отображались последние посты блога. Отредактируем файл controllers/SiteController.php. Добавим в метод actionIndex выборку постов:

use app\models\Post;

public function actionIndex()
{
    $posts = Post::find()->orderBy(['created_at' => SORT_DESC])->all();
    return $this->render('index', [
        'posts' => $posts,
    ]);
}

Теперь изменим файл представления views/site/index.php:

<?php
use yii\helpers\Html;
use yii\helpers\Url;
?>

<h1>Последние записи блога</h1>

<?php foreach ($posts as $post): ?>
    <div class="post-item" style="margin-bottom: 20px; padding: 10px; border: 1px solid #ddd;">
        <h2><?= Html::encode($post->title) ?></h2>
        <p><?= nl2br(Html::encode(mb_substr($post->content, 0, 200))) ?>...</p>
        <p>
            <a href="<?= Url::to(['post/view', 'id' => $post->id]) ?>">Читать далее</a>
        </p>
        <p style="color: #888; font-size: 0.9em;">
            Опубликовано: <?= date('d.m.Y H:i', $post->created_at) ?>
        </p>
    </div>
<?php endforeach; ?>

Теперь на главной странице будут отображаться последние посты с кратким содержанием. Ссылка ведёт на полную версию поста.

Лайфхак: Если вы хотите добавить пагинацию, используйте yii\data\Pagination. В контроллере передавайте объект пагинации, а в представлении выводите ссылки на страницы. Это спасёт от длинных списков.

Добавление формы обратной связи (опционально)

Для блога полезно иметь форму обратной связи. Yii2 упрощает эту задачу. Создайте модель ContactForm (она уже есть в базовом шаблоне) и настройте отправку письма через SMTP. В файле config/web.php добавьте компонент mailer:

'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.gmail.com',
        'username' => 'your-email@gmail.com',
        'password' => 'your-password',
        'port' => '587',
        'encryption' => 'tls',
    ],
],

Не забудьте установить расширение yiisoft/yii2-swiftmailer через Composer. Теперь пользователи смогут отправлять вам сообщения прямо с сайта.

Что в итоге

Мы прошли путь от установки Yii2 до полноценного блога с CRUD и выводом постов на главную. Вы узнали, как создавать миграции, пользоваться Gii и настраивать представления. Теперь вы можете расширять функционал: добавлять категории, теги, комментарии, загрузку изображений. Yii2 даёт для этого все инструменты. Главное — не бойтесь экспериментировать и читать документацию.

Студия WNDER