Слайд 2Краткое содержание:
зачем нужна генерация?
базовые возможности Symfony
как сделать плагин универсальнее
![Краткое содержание: зачем нужна генерация? базовые возможности Symfony как сделать плагин универсальнее](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-1.jpg)
генерация моделей, форм, модулей
удобное конфигурирование
Слайд 4Зачем нужна генерация?
увеличение скорости разработки
увеличение гибкости проекта
«кеширование» кода
![Зачем нужна генерация? увеличение скорости разработки увеличение гибкости проекта «кеширование» кода](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-3.jpg)
Слайд 5Основные направления генерации в Symfony
генерация моделей и форм
генерация модулей
генерация
![Основные направления генерации в Symfony генерация моделей и форм генерация модулей генерация пустых структур](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-4.jpg)
пустых структур
Слайд 6Шаблоны генераторов можно найти тут:
lib/plugins/sfDoctrinePlugin/data/generator/
lib/plugins/sfPropelPlugin/data/generator/
Что они позволяют делать:
менять методы в классах
![Шаблоны генераторов можно найти тут: lib/plugins/sfDoctrinePlugin/data/generator/ lib/plugins/sfPropelPlugin/data/generator/ Что они позволяют делать: менять](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-5.jpg)
форм/фильтров
менять шаблоны отображения в модулях
менять методы контроллеров в модулях
менять конфигурацию и хелперы модулей
Слайд 7Сами генераторы лежат здесь:
lib/plugins/sfDoctrinePlugin/lib/generator/
lib/plugins/sfPropelPlugin/lib/generator/
Что они позволяют делать:
изменить логику генерации форм
изменить
![Сами генераторы лежат здесь: lib/plugins/sfDoctrinePlugin/lib/generator/ lib/plugins/sfPropelPlugin/lib/generator/ Что они позволяют делать: изменить логику](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-6.jpg)
структуру наследования
изменить элементы (например виджеты)
Слайд 8Как сделать плагин универсальнее?
гибкое управление моделями (вкл/выкл)
произвольные внешние связи
изменение
![Как сделать плагин универсальнее? гибкое управление моделями (вкл/выкл) произвольные внешние связи изменение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-7.jpg)
моделей, по возможности без изменения кода выборок
управление плагином «из одной точки»
Слайд 9Управление генерацией моделей
включить только необходимое в проекте
отключить лишние поля и
![Управление генерацией моделей включить только необходимое в проекте отключить лишние поля и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-8.jpg)
бихевиоры
добавить новые поля, бихевиоры, связи
Слайд 10Практически это должно выглядеть примерно так:
lib/config/YourPlugin/model.yml:
enabled_models:
- ‘Model_1’
- ‘Model_2’
models:
Model_1:
disabled_relations: [‘RelationName’]
disabled_columns: [‘anonce’,***]
relation:
NewRelation:
***
![Практически это должно выглядеть примерно так: lib/config/YourPlugin/model.yml: enabled_models: - ‘Model_1’ - ‘Model_2’](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-9.jpg)
Слайд 11При этом мы можем задать общие для всех моделей настройки примерно так:
lib/config/model.yml:
disabled_behaviors:
-
![При этом мы можем задать общие для всех моделей настройки примерно так:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-10.jpg)
‘I18n’
options:
collate: ‘utf8_unicode_ci’
charset: ‘utf8’
И нам не придется указывать это в конфигах моделей плагинов.
Слайд 12Чтобы плагин был действительно гибким, выборки должны автоматически адаптироваться под изменение схемы
![Чтобы плагин был действительно гибким, выборки должны автоматически адаптироваться под изменение схемы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-11.jpg)
данных.
Для этого добавляется серия методов в базовый класс таблицы, позволяющая управлять:
набором полей в выборках
допустимыми джойнами
Слайд 13Управление генерацией форм и фильтров
управление формами (вкл/выкл)
смена виджетов/валидаторов и их
![Управление генерацией форм и фильтров управление формами (вкл/выкл) смена виджетов/валидаторов и их](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-12.jpg)
опций
настройки форм (авто embed I18n, формат имени, лейблов и сообщений и т.д.)
Слайд 14Практически это должно выглядеть примерно так:
lib/config/YourPlugin/model.yml:
disabled_forms:
- ‘Model_1’
disabled_filters:
- ‘Model_1’
forms:
Model_2:
field_name:
widget: ‘yourCustomWidget’
other_field_name: false
![Практически это должно выглядеть примерно так: lib/config/YourPlugin/model.yml: disabled_forms: - ‘Model_1’ disabled_filters: -](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-13.jpg)
Слайд 15Настройки по умолчанию для плагина вы можете задать в конфиге плагина:
yourPlugin/config/model.yml:
enabled_forms:
- ‘Model_1’
forms:
Model_2:
field_name:
![Настройки по умолчанию для плагина вы можете задать в конфиге плагина: yourPlugin/config/model.yml:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-14.jpg)
false
Это позволит включить в плагине по-умолчанию самое необходимое, чтобы не указывать одно и тоже в каждом проекте.
Слайд 16Управление генерацией модулей
зависимость от изменения в модели
выбор типа UI и
![Управление генерацией модулей зависимость от изменения в модели выбор типа UI и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-15.jpg)
темы
управление вложенностью модулей
управление доступом
поддержка UI в виде клиентских приложений на Sencha (ExtJS), Adobe AIR
Слайд 17Как и в случае с моделями, мы конфигурируем модуль примерно так:
lib/config/YourPlugin/module.yml:
all: #all
![Как и в случае с моделями, мы конфигурируем модуль примерно так: lib/config/YourPlugin/module.yml:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-16.jpg)
apps or appname
Module1:
child:
module: ‘Module2’
key: ‘category_id’
label: ‘label1’
filter: false
i18n_catalogue: ‘catalogue1’
Слайд 18И для всех модулей указываем общие параметры:
lib/config/module.yml:
all: #all apps or appname
UI: ‘jquery’
theme: ‘default’
actions_base_class: ‘dinActions’
ipp: 20 #items
![И для всех модулей указываем общие параметры: lib/config/module.yml: all: #all apps or](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-17.jpg)
per page
Слайд 19Текущая версия плагина поддерживает jQuery UI, сортировку i18n полей в списках и
![Текущая версия плагина поддерживает jQuery UI, сортировку i18n полей в списках и другие мелкие доработки.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-18.jpg)
другие мелкие доработки.
Слайд 20В самом ближайшем будущем планируется имплементация существующих расширений модулей (например древовидные списки).
![В самом ближайшем будущем планируется имплементация существующих расширений модулей (например древовидные списки).](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-19.jpg)
Слайд 21Как не заблудиться в конфигурационном лесу?
![Как не заблудиться в конфигурационном лесу?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-20.jpg)
Слайд 22Структура конфигурации генераторов:
/lib/config/model.yml
/lib/config/module.yml
plugins/yourPlugin/config/model.yml
plugins/yourPlugin/config/module.yml
/lib/config/yourPlugin/model.yml
/lib/config/yourPlugin/module.yml
Конфиги указаны в порядке перекрытия.
![Структура конфигурации генераторов: /lib/config/model.yml /lib/config/module.yml plugins/yourPlugin/config/model.yml plugins/yourPlugin/config/module.yml /lib/config/yourPlugin/model.yml /lib/config/yourPlugin/module.yml Конфиги указаны в порядке перекрытия.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-21.jpg)
Слайд 23Возможности, поддерживаемые конфигурацией:
лаконичный набор команд
поддержка обоих принципов: «все включено» и
![Возможности, поддерживаемые конфигурацией: лаконичный набор команд поддержка обоих принципов: «все включено» и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-22.jpg)
«все выключено»
генерация пустой структуры конфигов
ограниченная валидация
Слайд 24Опубликованные плагины:
Общие надстройки над фреймворком:
svn://dinecat.com/dinSymfonyExtraPlugin
Надстройки над Doctrine:
svn://dinecat.com/dinDoctrineExtraPlugin
Генерация административной панели:
svn://dinecat.com/dinAdminStdPlugin
![Опубликованные плагины: Общие надстройки над фреймворком: svn://dinecat.com/dinSymfonyExtraPlugin Надстройки над Doctrine: svn://dinecat.com/dinDoctrineExtraPlugin Генерация административной панели: svn://dinecat.com/dinAdminStdPlugin](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-23.jpg)
Слайд 25Постепенно мной будут публиковаться также другие плагины, в том числе «универсальные» плагины
![Постепенно мной будут публиковаться также другие плагины, в том числе «универсальные» плагины](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-24.jpg)
с общим для большинства проектов функционалом.
Плагины публикуются под лицензией MIT.
Я приглашаю всех, заинтересованных в разработке этих и других плагинов, к совместной работе в этом направлении.
Слайд 26В ближайшее время в сети появится два ресурса, использующих эти плагины:
http://maitavr.org/
Ассоциация разработчиков
http://aristotel.ua/
Благотворительный
![В ближайшее время в сети появится два ресурса, использующих эти плагины: http://maitavr.org/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/476432/slide-25.jpg)
аукцион