На 5-ом уроке мы изучим в один из инструментов Yii 2, это Gii. Если раньше вы писали модели, контроллеры и CRUD-операции вручную, то после этого урока забудите, что это такое. Gii ускорит твою разработку в разы, но важно использовать его правильно.
Gii это генератор кода, встроенный в Yii 2. Он создаёт шаблонный код для моделей, контроллеров, форм, модулей и даже целых CRUD-интерфейсов. Представь, что вместо часов рутинной работы тебе нужно лишь заполнить несколько полей в веб-интерфейсе и код готов.
Как включить Gii?
- Открой файл конфигурации
config/web.php. - Убедись, что в секции
modulesесть следующий код (обычно он добавлен по умолчанию в dev-окружении):
'modules' => [ 'gii' => [ 'class' => 'yii\gii\Module', 'allowedIPs' => ['127.0.0.1', '::1'], // Доступ только с локального IP ], ],
- Перейди по адресу
http://ваш-сайт/gii. Если видишь страницу с выбором генераторов, то всё готово!
Важно! Gii должен быть активен только в development-окружении (на локальной машине). Никогда не оставляй его включённым на продакшене это угроза безопасности!
Генерация моделей
Модели в Yii 2 связаны с таблицами базы данных. Gii умеет автоматически создавать классы моделей, анализируя структуру таблиц.
Пошаговый пример:
- В интерфейсе Gii выберите Model Generator.
- Укажите:
- Table Name:
user(название вашей таблицы). - Model Class:
User(имя класса модели).
- Table Name:
- Нажмите Preview, затем Generate.
Gii создаст файл models/User.php:
namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { public static function tableName() { return 'user'; } public function rules() { return [ [['username', 'email'], 'required'], [['created_at'], 'safe'], [['username'], 'string', 'max' => 50], [['email'], 'email'], ]; } }
Что делает этот код?
- Наследуется от
ActiveRecordдля работы с БД. - Метод
tableName()указывает на таблицу. rules()задаёт правила валидации для полей.
Генерация контроллеров и CRUD
CRUD (Create, Read, Update, Delete) стандартные операции для работы с данными. Gii генерирует за тебя:
- Контроллер с экшенами (actions).
- Views: формы создания/редактирования, список записей, просмотр деталей.
Генерация CRUD:
- В Gii выберите CRUD Generator.
- Заполните поля:
- Model Class:
app\models\User. - Controller Class:
app\controllers\UserController.
- Model Class:
- Нажмите Generate.
Gii создаст:
- Контроллер
UserController.phpс методамиactionIndex(),actionCreate()и т.д. - Views в папке
views/user/:index.php,_form.php,view.php.
Пример контроллера:
namespace app\controllers; use app\models\User; use yii\web\Controller; use yii\data\ActiveDataProvider; class UserController extends Controller { public function actionIndex() { $dataProvider = new ActiveDataProvider([ 'query' => User::find(), ]); return $this->render('index', [ 'dataProvider' => $dataProvider, ]); } // Другие экшены: create, update, delete... }
Модификация сгенерированного кода
Сгенерированный код это основа. Подстроим его под свои нужды.
1. Добавим проверку доступа в контроллер:
Изменим UserController, добавив поведение AccessControl:
use yii\filters\AccessControl; public function behaviors() { return [ 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['@'], // Только авторизованные пользователи ], ], ], ]; }
2. Расширим модель User:
Добавим метод для получения полного имени пользователя:
class User extends ActiveRecord { // ... public function getFullName() { return $this->first_name . ' ' . $this->last_name; } }
3. Изменим вьюху index.php:
Выведем полное имя вместо логина:
// Было: echo $dataProvider->models[0]->username; // Стало: echo $dataProvider->models[0]->fullName;
Меры безопасности при использовании Gii
- Никогда не включайте Gii на продакшене.
- Ограничьте IP-адреса в конфиге:
'allowedIPs' => ['127.0.0.1'], // Только локальный доступ
- Используйте .htaccess или nginx-настройки для защиты папки
gii. - Всегда проверяйте входные данные в сгенерированных формах. Например, в модели:
public function rules() { return [ [['email'], 'email'], // Валидация email [['role'], 'in', 'range' => ['admin', 'user']], // Разрешённые значения ]; }
Практические задачи
- Создайте модель для таблицы
post:- Поля:
id,title,content,author_id,created_at. - Добавьте правило валидации:
titleне длиннее 200 символов.
- Поля:
- Сгенерируйте CRUD для модели
Post:- Измените вьюху
index.php, чтобы выводились только посты текущего пользователя.
- Измените вьюху
- Добавьте кастомное поле в форму создания поста:
- Поле
tags(теги через запятую). Реализуйте его сохранение в БД.
- Поле
Пример решения задачи 3:
В модели Post:
public $tags; // Виртуальное свойство public function rules() { return [ [['tags'], 'safe'], ]; } // После сохранения поста: public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); // Логика сохранения тегов... }
Теперь вы умеете использовать Gii для автоматической генерации кода и настраивать его под свои задачи. Всегда дорабатывайте код, добавляйте валидацию и безопасность.
Полный курс с уроками по Yii 2 для начинающих: https://max-gabov.ru/yii-2-dlya-nachinaushih
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


