Многие разработчики начинают свой путь в веб-программировании с создания блога. И это логично: блог — отличный способ попрактиковаться в работе с базой данных, шаблонами, формами и аутентификацией. А если вы уже знакомы с Yii2, то у вас есть все шансы сделать это быстро и красиво. В этой статье мы шаг за шагом создадим простой, но полноценный блог на Yii2: от установки фреймворка до вывода постов и комментариев.
Почему именно Yii2?
Yii2 — это мощный PHP-фреймворк, который славится своей скоростью и удобством. Он следует парадигме MVC (Model-View-Controller), что помогает разделять логику и представление. Если вы раньше писали на чистом PHP, переход на Yii2 покажется вам глотком свежего воздуха. Всё структурировано, есть готовые инструменты для работы с БД, формами, валидацией и безопасностью.
Кроме того, Yii2 имеет отличную документацию и большое сообщество. Так что если вы застрянете, всегда найдёте ответ.
Установка и настройка
Первым делом нужно установить Yii2. Самый простой способ — использовать Composer. Если у вас его ещё нет, установите. Затем выполните команду:
composer create-project --prefer-dist yiisoft/yii2-app-basic blog
Эта команда создаст базовое приложение в папке blog. После установки настройте подключение к базе данных в файле config/db.php. Например, для MySQL:
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=blog',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
Теперь можно запустить встроенный сервер: php yii serve и открыть в браузере http://localhost:8080. Вы увидите стандартную страницу приветствия Yii2.
Создаём базу данных и модели
Для блога нам понадобятся как минимум две таблицы: posts (посты) и comments (комментарии). Создадим их через миграции. В Yii2 миграции — это способ версионировать схему БД. Выполните:
php yii migrate/create create_posts_table
Затем откройте созданный файл в папке migrations и опишите таблицу:
public function safeUp()
{
$this->createTable('posts', [
'id' => $this->primaryKey(),
'title' => $this->string()->notNull(),
'content' => $this->text(),
'created_at' => $this->integer(),
'updated_at' => $this->integer(),
]);
}
Аналогично создайте миграцию для комментариев. Не забудьте выполнить php yii migrate, чтобы применить изменения.
Теперь создадим модели. В Yii2 модель — это класс, который представляет данные и правила их валидации. Используйте Gii (генератор кода) для быстрого создания моделей. Перейдите по адресу http://localhost:8080/gii и выберите Model Generator. Укажите таблицу posts и создайте модель Post. То же самое для Comment.
В модели Post добавьте связи с комментариями:
public function getComments()
{
return $this->hasMany(Comment::className(), ['post_id' => 'id']);
}
Контроллеры и представления
Теперь создадим контроллер для постов. В Yii2 контроллеры отвечают за обработку запросов и возврат ответа. Создайте файл controllers/PostController.php:
namespace app\controllers;
use Yii;
use app\models\Post;
use app\models\Comment;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
class PostController extends Controller
{
public function actionIndex()
{
$posts = Post::find()->orderBy('created_at DESC')->all();
return $this->render('index', ['posts' => $posts]);
}
public function actionView($id)
{
$post = Post::findOne($id);
if (!$post) {
throw new NotFoundHttpException('Пост не найден');
}
$comment = new Comment();
if ($comment->load(Yii::$app->request->post()) && $comment->save()) {
return $this->refresh();
}
return $this->render('view', ['post' => $post, 'comment' => $comment]);
}
}
Теперь создайте представления. В папке views/post создайте файл index.php для списка постов и view.php для просмотра одного поста с комментариями. В index.php выведите заголовки и ссылки:
<?php foreach ($posts as $post): ?>
<h2><?= Html::a($post->title, ['view', 'id' => $post->id]) ?></h2>
<p><?= $post->content ?></p>
<?php endforeach; ?>
В view.php добавьте форму для комментариев. Используйте ActiveForm:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($comment, 'content')->textarea() ?>
<div class="form-group">
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Аутентификация и админка
Чтобы добавлять посты, нужна админка. В Yii2 есть готовый модуль для аутентификации. Можно использовать базовый шаблон с пользователями, но мы сделаем проще: создадим CRUD для постов через Gii. Перейдите в Gii и выберите CRUD Generator. Укажите модель Post и контроллер PostController (но осторожно: он перезапишет наш контроллер). Лучше создать отдельный контроллер AdminPostController в папке controllers/admin.
Для ограничения доступа используйте фильтр AccessControl:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['create', 'update', 'delete'],
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
],
],
];
}
Теперь только авторизованные пользователи смогут управлять постами.
Внешний вид и полезные мелочи
По умолчанию Yii2 использует Bootstrap 3. Вы можете подключить свои стили или использовать готовые темы. Не забудьте про ЧПУ (человекопонятные URL). В конфиге config/web.php включите компонент urlManager:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'post/<id:\d+>' => 'post/view',
],
],
Также добавьте пагинацию для списка постов. В контроллере:
$query = Post::find()->orderBy('created_at DESC');
$pagination = new Pagination(['totalCount' => $query->count(), 'pageSize' => 5]);
$posts = $query->offset($pagination->offset)->limit($pagination->limit)->all();
И в представлении выведите LinkPager.
Что в итоге?
Мы создали простой блог на Yii2: с постами, комментариями, админкой и красивыми URL. Конечно, это только основа. Вы можете добавить теги, категории, загрузку изображений, RSS-ленту и многое другое. Главное — вы получили рабочий каркас и поняли, как всё устроено внутри.
Yii2 — отличный выбор для быстрого старта. Не бойтесь экспериментировать и читать документацию. Удачи в разработке!
| Компонент | Назначение |
|---|---|
| Model | Работа с данными, валидация |
| View | Отображение данных |
| Controller | Обработка запросов |
Студия WNDER

