Если вы когда-нибудь писали 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.
Генерация модели: первый запуск
Зайдите на 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на свой шаблон или добавить кастомные поля.
gii-config.php. Тогда не придется каждый раз вводить параметры вручную.Типичные проблемы и их решение
Иногда Gii выдает ошибки. Вот самые частые:
- 403 Forbidden — проверьте
allowedIPsв конфиге. - Table not found — убедитесь, что таблица существует и префикс указан правильно (если есть).
- Namespace conflict — если модель уже существует, Gii перезапишет ее. Лучше удалить старую вручную или переименовать.
Если Gii не видит таблицу, проверьте подключение к БД в config/db.php.
Что в итоге
Gii — это мощный инструмент, который ускоряет разработку в разы. Он не заменяет ручное написание кода, но берет на себя 80% рутины. Настройка занимает 5 минут, генерация — 10 секунд. Используйте его для прототипов и типовых задач, а уникальную логику пишите сами. Главное — не забывайте выключать Gii на боевом сервере.
Студия WNDER


