@dutchakdev read-only
Пользователь
26 августа 2013 в 21:20

Разработка → Автоматическая генерация кода в Yii из песочницы

Yii*, PHP*
Привет, %username%! Несколько лет назад я познакомился с замечательным фреймворком Yii и с тех пор как только у меня появляется возможность вести проект на нем — я дерусь берусь за нее.

Одной из крутых фич которую я очень люблю, это инструмент Gii, который начиная с версии 1.1.2 входит в состав фреймворка. Сейчас я хочу поговорить сторонних модулях основанных на нем.

Gii «Из коробки» генерирует достаточно функциональный код, часто когда нужно создать мелкую фичу приходится очень мало менять. Но что если нам нужно больше возможностей? К примеру добавить поддержку нескольких языков, или изменит стиль генерируемого кода?
Есть 2 способа расширения: Изменять существующие шаблоны и создавать свои генераторы (ну или использовать уже готовые соответственно). На базе этих возможностей были созданы достаточно интересные продукты для комфортной работы с авто генерацией кода.

Giix


Страница расширения
Пожалуй мой самый любимый генератор. Генерирует для моделей базовый класс с кодом и отдельно пустой класс модели с унаследованием от базового. Таким образом при изменении базы можно сделать пере-генерацию без затирания своего кода.

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

Основные фичи

  • Улучшенная и упрощенная i18n
  • Поддержка связей HAS_MANY и MANY_MANY.
  • Встроенная поддержка для сохранения связей MANY_MANY при помощи нового метода GxActiveRecord::saveWithRelated.
  • Правильная обработка связанных атрибутов моделей, рендеринг соответствующих полей формы основываясь на типе связей.
  • Удобная структура моделей для дальнейшей работы


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

Manymanyajaxcrudadmin


Страница расширения
Достаточно крутая штука. Предоставляет шаблон для генерации кода с использованием ajax в фронтенде для моделей со связками MANY_MANY. Удобно когда нужно создать сущность к примеру «продукт» или «категория».

К примеру для продукта мы используем обычный CListView или CGridView а для категорий можем использовать nestedset, редактируемые при помощи плагина jstree.

Все это дело редактируется в модальных диалогах, с возможностью прикреплять файлы.
Базируется на Giix.

Заключение


Моделей и наборов шаблонов для генерации намного больше, я описал лишь те которые приходилось использовать и которые мне действительно нравятся.
Идея форка для Giix не покидает меня, есть действительно хорошие идеи по-поводу данного расширения к примеру: добавить настройку типов полей перед генерацией, настройка правил, фильтров, возможно это стоит оформить как новый модуль для yii2. Время покажет.

Это моя первая статья, до этого я умел только троллить. За троллинг и оскорбления других пользователей, ранее, прошу прощения. Советы и критику по написанию статьи прошу писать в личку, с ошибками туда-же (мой Русский плох, я знаю, работаю над этим).

Ссылки:
manymanyajaxcrudadmin
giix
Автоматическая генерация кода в Yii
@dutchakdev
карма
0,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (8)

  • 0
    Спасибо. Для себя использовал самописный кодогенератор, основанный на phpparser(он умеет догенереривовать нужное в моделях), однако он все еще далек от того состояния при котором его можно выложить.
  • 0
    Создал для себя Skeleton с модифицированным Gii, у меня по именам полей «угадываются» типы данных, точнее по их суффиксам.
    Для примера если вы название поля заканчивается на _datetime, то скорее всего тут лежит timestamp и отображать его нужно именно в таком виде.
    Еще поведения настроены для date, image, html, enum. Еще в админке названия моделей идут через i18n с падежной формой(пользователь, список пользователей, добавить пользователя). Очень здорово экономит время для стандартных админок.
    Если интересно можно посмотреть тут bitbucket.org/rakot/boosted_yii, там есть небольшая инструкция и типовая база, чтобы это попробовать генератор в действии. Сильно не пинайте =)
  • 0
    Спасибо за статью!
    Давно хочу начать использовать кодогенерацию, кто что может сказать по этому поводу? Может неочевидные плюсы (помимо «быстро») и минусы такого подхода в реальных проектах. Или кто видел неожиданности с gii?
    В Ruby-on-Rails (2.3.3), которым я когда то пользовался была кодогенерация, которая отбила желание её использовать на долгие годы вперед — не произойдет ли так же с gii?
    • 0
      Не работает с пространствами имен (решаемо, но не до конца, впрочем это глобальная проблема yii 1.x), из самого раздражающего запомнилось что очень тяжело кастомизировать вывод rules() и relations() т.к. в шаблон они передаются уже в виде сформированных строк.
      • 0
        А rules он генерит исходя из схемы таблицы в базе?
        • 0
          Угу, но немного редактировать скорее всего все равно придется (впрочем это быстрее чем самому писать).
          • 0
            А Вы редактируете потому что генерит, что то не соответствующее базе или Вы посто в базе не все покрываете условиями?
            Ну это кроме условий подпадания строки под валидаторы email, phone — тут понятно.
            • 0
              Часть условий не совсем верные, например, для unsigned int получим (в *.13 версии) «array('position', 'length', 'max'=>11)» хотя «numerical» с «min» был бы правильнее. И еще не очень нравится что все поля располагаются в кучах по используемым валидаторам — оно совершенно не читаемое :( (впрочем это больше идеологическая проблема).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.