Gii в Yii2: генерация моделей, CRUD и своих шаблонов
Как поднять Gii в Yii2, сгенерировать модель по таблице и полный CRUD за пару минут — и почему сгенерированный код нельзя оставлять как есть.

Gii — встроенный генератор кода в Yii2. Он читает структуру таблицы в базе и создаёт из неё готовый класс модели, а из модели — контроллер с представлениями (CRUD). Задача этой статьи узкая: поднять Gii на локальной установке Yii2, сгенерировать модель и CRUD по существующей таблице, разобрать частые ошибки и научиться менять шаблоны генерации под себя. Если вы стартуете новый проект и у вас уже есть схема БД, за 10–15 минут получите работающий каркас админки.
Всё ниже проверено на Yii2 (ветка 2.0.x, актуальные релизы 2.0.4x) и модуле yiisoft/yii2-gii. Для Yii3 генератор устроен иначе — здесь речь только про Yii2.
Что нужно иметь до начала
- Установленный Yii2 через шаблон Basic или Advanced (
composer create-project yiisoft/yii2-app-basic). - Пакет
yiisoft/yii2-gii. В шаблонах Basic и Advanced он ставится как dev-зависимость по умолчанию; проверьте наличие вcomposer.json. Если нет —composer require --dev yiisoft/yii2-gii. - Настроенное подключение к БД в
config/db.phpи хотя бы одна таблица с данными. - Запущенный локальный сервер:
php yii serveподнимет приложение наhttp://localhost:8080. - Доступ к Gii по умолчанию открыт только с localhost. Если работаете через удалённый хост, это отдельная настройка — о ней ниже.
Шаг 1. Включаем модуль Gii
В шаблоне Basic Gii подключается в config/web.php внутри блока if (YII_ENV_DEV). Откройте файл и убедитесь, что там есть примерно такой фрагмент:
// config/web.php — только для окружения разработки
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
// список IP, которым разрешён доступ
'allowedIPs' => ['127.0.0.1', '::1'],
];
}Проверка: откройте http://localhost:8080/index.php?r=gii (или /gii при включённых ЧПУ). Должна открыться панель с плитками генераторов: Model Generator, CRUD Generator, Controller Generator и другие. Если вместо неё видите 403 или 404 — смотрите раздел про ошибки.
Шаг 2. Генерируем модель по таблице
Допустим, в базе есть таблица product. Нажмите Model Generator.
- В поле Table Name введите
product. Gii подставит имя классаProductавтоматически. - Model Class — имя класса, по умолчанию
Product. - Namespace — оставьте
app\models, если не разносите модели по подпапкам. - Отметьте Generate Relations, чтобы Gii создал методы связей по внешним ключам (
getCategory()и т. п.). Работает, только если внешние ключи реально объявлены в схеме. - Отметьте Generate Labels from DB Comments, если у столбцов есть комментарии — тогда подписи полей возьмутся из них.
- Нажмите Preview. Gii покажет список файлов и diff. Затем Generate.
Проверка: в папке models появится файл Product.php с методами tableName(), rules() и attributeLabels(). Правила валидации Gii выводит из типов столбцов: NOT NULL превращается в required, длина varchar — в string, max.
Сгенерированные rules() — это отражение схемы БД, а не бизнес-логики. Gii не знает, что email должен быть валидным адресом, а цена — положительной. Правила нужно дописывать руками.Шаг 3. Генерируем CRUD
Вернитесь на главную Gii, откройте CRUD Generator.
- Model Class — полное имя:
app\models\Product. - Search Model Class —
app\models\ProductSearch. Этот класс отвечает за фильтры и сортировку в списке. - Controller Class —
app\controllers\ProductController. - View Path оставьте пустым — по умолчанию
@app/views/product. - Нажмите Preview, затем Generate.
Проверка: откройте http://localhost:8080/index.php?r=product/index. Должна появиться таблица GridView со списком записей, кнопками create/update/delete и фильтром в шапке. Это полностью рабочий CRUD.
Что делает каждый генератор
| Генератор | Что создаёт | Когда использовать |
|---|---|---|
| Model | Класс ActiveRecord по таблице | Есть таблица, нужна модель |
| CRUD | Контроллер, SearchModel, представления index/view/create/update | Нужна админка по модели |
| Controller | Пустой контроллер с указанными экшенами | Нужен каркас без привязки к модели |
| Module | Структуру модуля Yii2 | Выделяете часть приложения в модуль |
| Form | Файл представления с формой ActiveForm | Нужна форма без полного CRUD |
Свои шаблоны генерации
Стандартный CRUD от Gii редко устраивает целиком: где-то нужен свой layout GridView, где-то — другой набор колонок или Bootstrap-разметка под ваш фронтенд. Вместо того чтобы править сгенерированные файлы после каждого запуска, скопируйте шаблоны генератора и правьте их.
- Найдите папку с дефолтными шаблонами внутри пакета:
vendor/yiisoft/yii2-gii/src/generators/crud/default(в старых версиях путь безsrc/—generators/crud/default). Точное расположение сверьте в установленной версии пакета. - Скопируйте её содержимое в свой проект, например в
templates/crud/mytemplate. - Пропишите путь к шаблону в конфигурации модуля:
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '::1'],
'generators' => [
'crud' => [
'class' => 'yii\gii\generators\crud\Generator',
'templates' => [
// подпись : путь к папке шаблонов
'mytemplate' => '@app/templates/crud/mytemplate',
],
],
],
];После этого в форме CRUD Generator появится выпадающий список Code Template с вашим вариантом. Внутри шаблонов — обычные PHP-файлы, которые исполняются генератором; правьте разметку и логику формирования колонок под свой проект.
Если не получилось
- Forbidden (403), You are not allowed to access this page. Ваш IP не в
allowedIPs. При работе не с localhost добавьте свой адрес в массив. Никогда не оставляйте Gii открытым в production и не ставьте туда*. - Not Found (404) на /gii. Модуль не подключён или вы не в dev-окружении. Проверьте, что константа
YII_ENVравнаdev(в Basic задаётся вweb/index.php) и что блок с$config['modules']['gii']исполняется. - Class 'yii\gii\Module' not found. Пакет не установлен. Выполните
composer require --dev yiisoft/yii2-gii. - Table 'product' does not exist. Gii обращается к соединению
dbиз конфигурации. Проверьтеconfig/db.php: dsn, имя базы, что миграции применены. - Generate Relations ничего не создал. Связи строятся по внешним ключам в схеме. Если FK объявлены только логически (без
FOREIGN KEYв DDL), Gii их не увидит — методы связей придётся писать вручную.
Что делать дальше
Сгенерированный код — это черновик, а не финал. После генерации пройдитесь по трём местам: допишите бизнес-правила в rules() модели, уберите из GridView лишние колонки и добавьте нужные форматы, проверьте фильтры в SearchModel. Если генерируете CRUD регулярно — соберите свой шаблон один раз, чтобы каждый следующий запуск сразу давал разметку под ваш проект. И обязательно закройте доступ к Gii за пределами dev-окружения: генератор пишет файлы на диск и не должен быть доступен снаружи.
Карточки для маркетплейсов: Таблица товаров и папка фотографий на входе — комплект слайдов и описаний на выходе, по требованиям Wildberries и Ozon.
Спросить за 5 ₽Источники: Yii2 Guide — Generating Code with Gii, yiisoft/yii2-gii — репозиторий пакета
Частые вопросы
У меня Yii3, инструкция подойдёт?
Можно ли пользоваться Gii на боевом сервере?
Gii перезапишет мой код, если я запущу генерацию повторно?
Почему в модели нет проверки email или диапазона чисел?
Как сгенерировать сразу все модели по базе?
Что делать, если Preview показывает пустой diff и файлы не создаются?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.