Если вы когда-нибудь писали CRUD-операции вручную, то знаете, как это утомительно. Создавать модели, контроллеры, представления — одно и то же из раза в раз. Gii в Yii2 решает эту проблему. Это встроенный генератор кода, который берет на себя рутину. В этой статье я покажу, как его настроить и использовать, чтобы сэкономить часы работы.

Что такое Gii и зачем он нужен

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

Gii особенно полезен, когда:

  • Вы прототипируете приложение и нужно быстро сделать каркас.
  • У вас много таблиц и лень писать однотипный код.
  • Вы учитесь и хотите посмотреть, как должен выглядеть правильно написанный CRUD.

Настройка Gii: первые шаги

По умолчанию Gii уже включен в Yii2, но только для dev-окружения. Если вы установили Yii2 через Composer, то в файле config/web.php уже есть закомментированный блок. Вам нужно его раскомментировать и настроить.

if (YII_ENV_DEV) {
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*'],
    ];
}

Здесь allowedIPs — список IP-адресов, с которых разрешен доступ к Gii. На локальной машине достаточно 127.0.0.1. Если вы работаете в локальной сети, добавьте IP своей машины. Без этого вы получите ошибку 403.

Правило: Никогда не включайте Gii на production-сервере. Это дыра в безопасности. Используйте его только локально или на staging.

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

Зайдите на http://localhost/your-app/index.php?r=gii. Вы увидите интерфейс Gii. Выберите "Model Generator". Введите имя таблицы, например user. Gii сам подтянет поля и типы. Нажмите "Preview", затем "Generate". Готово — модель создана.

Вот как это выглядит в коде:

namespace app\models;

use yii\db\ActiveRecord;

class User extends ActiveRecord
{
    public static function tableName()
    {
        return 'user';
    }

    public function rules()
    {
        return [
            [['username', 'email'], 'required'],
            [['email'], 'email'],
            [['username'], 'string', 'max' => 255],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'username' => 'Username',
            'email' => 'Email',
        ];
    }
}

Gii сгенерировал не только класс, но и правила валидации, метки атрибутов и методы для связей (если есть внешние ключи). Вам осталось только проверить и, возможно, добавить свои правила.

Генерация CRUD: контроллеры и представления

Теперь самое интересное — CRUD. В интерфейсе Gii выберите "CRUD Generator". Укажите модель (например, app\models\User), контроллер (UserController) и путь к представлениям. Нажмите "Generate". Gii создаст:

  • Контроллер с методами index, view, create, update, delete.
  • Представления для каждого действия.
  • Формы с валидацией.

Пример сгенерированного контроллера:

namespace app\controllers;

use Yii;
use app\models\User;
use app\models\UserSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;

class UserController extends Controller
{
    public function actionIndex()
    {
        $searchModel = new UserSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    public function actionCreate()
    {
        $model = new User();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }

    // ... другие действия
}

Обратите внимание, что Gii использует класс UserSearch для поиска и фильтрации. Он тоже генерируется автоматически, если вы выбрали опцию "Generate SearchModel".

ПараметрОписаниеПример
Model ClassПолное имя моделиapp\models\User
Controller ClassИмя контроллераapp\controllers\UserController
View PathПуть к представлениям@app/views/user
Enable I18NВключить переводfalse (обычно)

Советы по кастомизации сгенерированного кода

Gii генерирует неплохой код, но он не идеален. Вот что я советую доделать руками:

  • Проверьте правила валидации. Gii часто ставит все поля как required, но это не всегда нужно.
  • Добавьте связи. Если в таблице есть внешние ключи, Gii создаст методы getRelation(), но иногда их нужно переименовать или дополнить.
  • Настройте представления. Сгенерированные формы используют стандартные виджеты. Вы можете заменить ActiveForm на свой шаблон или добавить кастомные поля.
Лайфхак: Если вы часто генерируете однотипные CRUD, сохраните настройки Gii в файл gii-config.php. Тогда не придется каждый раз вводить параметры вручную.

Типичные проблемы и их решение

Иногда Gii выдает ошибки. Вот самые частые:

  • 403 Forbidden — проверьте allowedIPs в конфиге.
  • Table not found — убедитесь, что таблица существует и префикс указан правильно (если есть).
  • Namespace conflict — если модель уже существует, Gii перезапишет ее. Лучше удалить старую вручную или переименовать.

Если Gii не видит таблицу, проверьте подключение к БД в config/db.php.

Что в итоге

Gii — это мощный инструмент, который ускоряет разработку в разы. Он не заменяет ручное написание кода, но берет на себя 80% рутины. Настройка занимает 5 минут, генерация — 10 секунд. Используйте его для прототипов и типовых задач, а уникальную логику пишите сами. Главное — не забывайте выключать Gii на боевом сервере.

Студия WNDER