Когда ваш сайт на Yii2 начинает расти, рано или поздно возникает желание управлять контентом не через базу данных вручную, а через удобный интерфейс. Админ панель — это как руль в автомобиле: без нее вы едете, но вслепую. В этой статье я покажу, как быстро и без боли сделать свою админку на Yii2. Даже если вы только начали изучать фреймворк, не пугайтесь — объясню все на пальцах.
Почему Yii2 идеален для админки?
Yii2 — это мощный PHP-фреймворк, который из коробки даёт много инструментов для быстрой разработки. Он умеет генерировать CRUD (Create, Read, Update, Delete) — то есть формы для добавления, просмотра, изменения и удаления записей. Это как конструктор Lego: вам остаётся только собрать детали. Плюс встроенная поддержка RBAC (управление ролями) и готовые виджеты, например, GridView и ActiveForm. Всё это делает создание админки делом пары часов.
Шаг 1: Установка и настройка базового шаблона
Для начала нам нужно установить Yii2. Если у вас уже есть проект — пропустите этот шаг. Если нет — используйте Composer:
composer create-project --prefer-dist yiisoft/yii2-app-basic myadmin
После установки откройте файл config/web.php и настройте подключение к базе данных. Например, для MySQL:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=myadmin',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
],
Теперь создайте базу данных и выполните миграции (если они есть). Для чистоты эксперимента создадим таблицу для постов блога:
CREATE TABLE post (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Шаг 2: Генерация модуля админ панели
В Yii2 принято выносить админку в отдельный модуль. Это как отдельная комната в доме: всё для управления контентом находится в одном месте. Создадим модуль admin в папке modules. Структура:
modules/
admin/
controllers/
views/
Admin.php
Файл Admin.php — это класс модуля. Вот его минимальное содержимое:
namespace app\modules\admin;
class Admin extends \yii\base\Module
{
public $controllerNamespace = 'app\modules\admin\controllers';
public function init()
{
parent::init();
// custom initialization code
}
}
Теперь зарегистрируем модуль в конфигурации приложения (config/web.php):
'modules' => [
'admin' => [
'class' => 'app\modules\admin\Admin',
'defaultRoute' => 'post/index',
],
],
Теперь по адресу http://myadmin.loc/admin мы попадём в админку. Пока там ничего нет, но скоро всё появится.
Шаг 3: Создание контроллера и CRUD для постов
Самый быстрый способ — использовать Gii, встроенный генератор кода Yii2. Откройте http://myadmin.loc/gii. Выберите «Model Generator», укажите таблицу post и класс модели app\models\Post. Затем «CRUD Generator»:
- Model Class:
app\models\Post - Search Model Class:
app\models\PostSearch - Controller Class:
app\modules\admin\controllers\PostController - View Path:
@app/modules/admin/views/post
Нажмите «Preview» и «Generate». Вуаля — у вас есть контроллер с действиями index, view, create, update, delete. Теперь перейдите в админку: /admin/post — вы увидите таблицу со списком постов. Красота!
Шаг 4: Настройка прав доступа (RBAC)
Админка должна быть доступна только администраторам. Yii2 предлагает RBAC (Role-Based Access Control). Настроим его. Сначала включим компонент в config/web.php:
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
Выполните миграцию для создания таблиц RBAC:
yii migrate --migrationPath=@yii/rbac/migrations
Теперь создадим роли и правила. Для простоты сделаем так: в контроллере админки добавим поведение (behavior) с фильтром доступа:
use yii\filters\AccessControl;
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['@'], // только авторизованные пользователи
],
],
],
];
}
Но лучше использовать RBAC. Создайте консольную команду для инициализации ролей:
namespace app\commands;
use yii\console\Controller;
use Yii;
class RbacController extends Controller
{
public function actionInit()
{
$auth = Yii::$app->authManager;
$admin = $auth->createRole('admin');
$auth->add($admin);
// Назначить роль пользователю с ID 1
$auth->assign($admin, 1);
}
}
Запустите php yii rbac/init. Теперь в контроллере проверяйте роль:
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['admin'],
],
],
],
Готово! Только пользователи с ролью admin могут зайти в админку.
Шаг 5: Улучшаем интерфейс с помощью виджетов
Yii2 предлагает кучу виджетов для админки. Например, GridView для таблиц и ActiveForm для форм. Давайте кастомизируем представление index.php:
<?php
use yii\grid\GridView;
use yii\helpers\Html;
?>
<h1>Управление постами</h1>
<p>
<?= Html::a('Создать пост', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
'id',
'title',
[
'attribute' => 'created_at',
'format' => ['date', 'php:d.m.Y'],
],
[
'class' => 'yii\grid\ActionColumn',
'template' => '{view} {update} {delete}',
],
],
]); ?>
Добавьте немного CSS для красоты (например, в @app/web/css/admin.css). Подключите его в layout админки.
| Виджет | Назначение | Пример использования |
|---|---|---|
| GridView | Отображение табличных данных с сортировкой и фильтрацией | Список пользователей, постов |
| ActiveForm | Генерация форм на основе моделей | Форма создания/редактирования |
| DetailView | Отображение одной записи в виде таблицы | Просмотр деталей поста |
| Menu | Навигационное меню | Боковое меню админки |
Шаг 6: Безопасность и дополнительные советы
Админка — лакомый кусок для хакеров. Вот несколько правил:
- Используйте HTTPS на продакшене.
- Ограничьте доступ по IP, если админка только для вас.
- Не выводите сырые ошибки — настройте
YII_DEBUGв false. - Регулярно обновляйте Yii2 и зависимости.
Ещё один лайфхак: создайте отдельный layout для админки, чтобы не смешивать с фронтендом. Например, @app/modules/admin/views/layouts/main.php:
<?php
use yii\helpers\Html;
?>
<!DOCTYPE html>
<html>
<head>
<title>Админ панель</title>
<?= Html::cssFile('@web/css/admin.css') ?>
</head>
<body>
<div class="wrap">
<?= $content ?>
</div>
</body>
</html>
В контроллере установите этот layout:
public $layout = '@app/modules/admin/views/layouts/main';
mdmsoft/yii2-admin для готового UI админки с RBAC. Устанавливается через Composer, и вы получаете меню, управление ролями и пользователями из коробки.
Что в итоге
Мы создали полноценную админ панель на Yii2: от установки до настройки прав доступа. Теперь у вас есть инструмент для управления контентом, который легко расширять. Главное — не бойтесь экспериментировать с Gii и виджетами. Yii2 создан для того, чтобы ускорять разработку, а не усложнять её. Попробуйте добавить новые модули, например, для управления пользователями или категориями. Удачи в кодинге!

