yakoffka.ru
    грабли, костыли и велосипеды php, css, html, js и прочего

    Yii 2.0 часть 3. Генерация кода при помощи Gii

    YiiИспользование модуля Gii для автоматической генерации кода. Yii 2.0. конспект-памятка курса 'Полное руководство по Yii 2.0' с незначительными вариациями. Оригинал на русском языке можно найти здесь.

    АЛАРМА!!! Данная памятка являет собой откровенный копипаст! Для ознакомления с первоисточником перейдите по ссылке, указанной выше.

    копипастил Капустин Яков

    оглавление

    Gii представлен в Yii как модуль и предназначен для автоматической генерации кода, реализующего некоторые общие функции вебсайта. Необходимо удостовериться в наличии следующего кода в конфигурационном файле config/web.php:

    config/web.php:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php

      $params 
    = require __DIR__ '/params.php';
      
    $db = require __DIR__ '/db.php';

      
    $config = [

        ...

      ];

      if (
    YII_ENV_DEV) {
        
    // configuration adjustments for 'dev' environment
        
    $config['bootstrap'][] = 'debug';
        
    $config['modules']['debug'] = [
          
    'class' => 'yii\debug\Module',
          
    // uncomment the following to add your IP if you are not connecting from localhost.
          //'allowedIPs' => ['127.0.0.1', '::1'],
        
    ];

        
    $config['bootstrap'][] = 'gii';
        
    $config['modules']['gii'] = [
          
    'class' => 'yii\gii\Module',
          
    // uncomment the following to add your IP if you are not connecting from localhost.
          //'allowedIPs' => ['127.0.0.1', '::1'],
        
    ];
      }

      return 
    $config;
      

    По умолчанию, в целях обеспечения безопасности, доступ к Gii не с локального хоста запрещён. Константа YII_ENV_DEV устанавливается в значение true во входном скрипте приложения web/index.php, переводя приложение в режим разработки:

    Объявление YII_ENV_DEV в web/index.php:
    1
    2
    3
    4
    5
    6
    7

      
    ...
      
    // comment out the following two lines when deployed to production
      
    defined('YII_DEBUG') or define('YII_DEBUG'true);
      
    defined('YII_ENV') or define('YII_ENV''dev');
      ...
      

    При наличии указанных выше фрагментов кода Gii активирован и доступен по следующему адресу: /index.php?r=gii.

    Чтобы использовать Gii для генерации класса Active Record, выбираю 'Генератор модели' (нажав на ссылку на главной странице Gii). Заполняю форму следующим образом:

    • Имя таблицы: country;
    • Класс модели : Country.
    Рис. 1 Генерация класса Active Record с помощью Gii
    Рис. 1 Генерация класса Active Record с помощью Gii

    Затем нажимаю на кнопку 'Предварительный просмотр'. Файл models/Country.php перечислен в результатах создаваемых файлов классов. Нажмём на имя файла класса для просмотра его содержимого.

    Нажмём на кнопку diff рядом с именем файла, чтобы увидеть различия между генерируемым кодом и существующей версией.

    Рис. 2 Просмотр различий между генерируемым Gii кодом и существующей версией
    Рис. 2 Просмотр различий между генерируемым Gii кодом и существующей версией

    Для перезаписи существующего файла ставлю флажок рядом с 'overwrite' и нажмите кнопку 'Generate'. Для создания нового файла нужно просто нажать 'Generate'.

    Смотрю сообщения об ошибках, выставляю 0777 на НЕОБХОДИМЫЕ директории, 'Generate'.

    Рис. 3 Сообщение о том, что код был успешно сгенерирован
    Рис. 3 Сообщение о том, что код был успешно сгенерирован

    CRUD расшифровывается как Create, Read, Update и Delete, предоставляющий четыре основные функции, выполняемые над данными на большинстве веб-сайтов. Чтобы создать функциональность CRUD используя Gii, необходимо выбрать 'CRUD Генератор', нажав на ссылку на главной странице Gii. Для таблицы «country» заполняю полученную форму следующим образом:

    1. Model Class: app\models\Country;
    2. Search Model Class: app\models\CountrySearch;
    3. Controller Class: app\controllers\CountryController;
    4. View Path: @app/views/country.
    Рис. 4 Генерация CRUD кода
    Рис. 4 Генерация CRUD кода

    Затем 'Preview',

    Рис. 5 Список изменяемых и вновь создаваемых файлов
    Рис. 5 Список изменяемых и вновь создаваемых файлов

    копирую на всякий перезаписываемые файлы, 0777 и 'overwrite'.

    Рис. 6 Создаём дубликаты изменяемых файлов
    Рис. 6 Создаём дубликаты изменяемых файлов
    Рис. 7 The code has been generated successfully
    Рис. 7 The code has been generated successfully

    Проверка

    Чтобы увидеть, как работает весь вышеприведённый код, перейдите по следующей ссылке в своём браузере: /index.php?r=country%2Findex.

    Рис. 8 Результат работы сгенерированного Gii кода
    Рис. 8 Результат работы сгенерированного Gii кода