Генерация кода из командной строки в Yii2

30 Mar 2019

Всем привет! В этой статье рассмотрим генерацию кода для Yii2 из командной строки. С Yii я работаю достаточно давно, еще с первой версии. Одной из интересных особенностей фреймворка является встроенный кодогенератор Gii. С его помощью можно быстро сгенерировать модели данных, контроллеры и даже целые CRUD блоки на основании таблицы базы данных.

Это достаточно полезно для быстрого прототипирования или для создания основы приложения. Конечно, обычно код потом меняется под нужды конкретной задачи.

Gii предоставляет графический интерфейс для создания кода. Им достаточно просто и удобно пользоваться. Также по нему есть довольно подробная документация.

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

Итак, из коробки Gii включает в себя 6 генераторов: Model, Crud, Controller, Form, Module, Extension. Я чаще всего использую Model и Crud generator.

Подготовка

Для проверки работы генераторов установим Yii2 и создадим тестовое приложение, как описано в документации После этого создадим таблицу task.

CREATE TABLE `task` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `subject` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `due_date` datetime DEFAULT NULL,
  `created_by` INT(11) DEFAULT NULL,
  `assigned_to` INT(11) DEFAULT NULL,
  `client_id` INT(11) DEFAULT NULL,
  `status_id` INT(11) DEFAULT NULL,
  `created_at` INT(11) DEFAULT NULL,
  `updated_at` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Чтобы увидеть доступные команды, вызовем консольный gii. Дальше вызовем help, чтобы увидеть справку по конкретной команде

php yii gii
php yii help gii/model

Создание модели

Теперь попробуем сгенерировать модель. Указываем название таблицы, название модели и namespace. Также можно указать дополнительные параметры. Например, сгенерировать query - класс, ктотрый будет содержать различные запросы.

php yii gii/model --tableName=task --modelClass=Task --ns="app\models"
php yii gii/model --tableName=task --modelClass=Task --ns="app\models" --generateQuery=1 --queryClass=TaskResource --queryNs="app\models\query"

В результате будет сгенерирован класс модели: models/Task.php.

Создание контроллера

Теперь создадим контроллер. Здесь полностью указать название вместе с namespace. Также можно указать список action и другие параметры.

php yii gii/controller --controllerClass=app\\controllers\\TestController --actions=index

В результате будет сгенерирован контроллер controllers/TestController.php и файлы отображения views/test/index.php.

Создание CRUD

Дальше самое интересное - создадим CRUD. CRUD - акроним от слов "create", "read", "update", "delete" - базовых операций по работе с хранилищем данных. Соответственно, будет создана почти полноценная админка для нашей сушности.

php yii gii/crud --modelClass=app\\models\\Task --controllerClass=app\\controllers\\TaskController

В результате будет сгенерирован контроллер controllers/TaskController.php и все необходимые вьюхи views/task/_form.php

Итоги

В результате мы можем генерировать код автоматичекски из командной строки. Если возможностей встроенных генераторов не хватает, можно попробовать найти сторонний генератор Или написать свой собственный генератор. На этом пока все. Спасибо за внимание!