Когда ваш сайт на 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 — вы увидите таблицу со списком постов. Красота!

Правило: Всегда используйте SearchModel для фильтрации и сортировки в GridView. Это упрощает жизнь и делает интерфейс дружелюбным.

Шаг 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 создан для того, чтобы ускорять разработку, а не усложнять её. Попробуйте добавить новые модули, например, для управления пользователями или категориями. Удачи в кодинге!

Студия WNDER