Слайд 2Краткое содержание:
зачем нужна генерация?
базовые возможности Symfony
как сделать плагин универсальнее
генерация моделей, форм, модулей
удобное конфигурирование
Слайд 4Зачем нужна генерация?
увеличение скорости разработки
увеличение гибкости проекта
«кеширование» кода
Слайд 5Основные направления генерации в Symfony
генерация моделей и форм
генерация модулей
генерация
пустых структур
Слайд 6Шаблоны генераторов можно найти тут:
lib/plugins/sfDoctrinePlugin/data/generator/
lib/plugins/sfPropelPlugin/data/generator/
Что они позволяют делать:
менять методы в классах
форм/фильтров
менять шаблоны отображения в модулях
менять методы контроллеров в модулях
менять конфигурацию и хелперы модулей
Слайд 7Сами генераторы лежат здесь:
lib/plugins/sfDoctrinePlugin/lib/generator/
lib/plugins/sfPropelPlugin/lib/generator/
Что они позволяют делать:
изменить логику генерации форм
изменить
структуру наследования
изменить элементы (например виджеты)
Слайд 8Как сделать плагин универсальнее?
гибкое управление моделями (вкл/выкл)
произвольные внешние связи
изменение
моделей, по возможности без изменения кода выборок
управление плагином «из одной точки»
Слайд 9Управление генерацией моделей
включить только необходимое в проекте
отключить лишние поля и
бихевиоры
добавить новые поля, бихевиоры, связи
Слайд 10Практически это должно выглядеть примерно так:
lib/config/YourPlugin/model.yml:
enabled_models:
- ‘Model_1’
- ‘Model_2’
models:
Model_1:
disabled_relations: [‘RelationName’]
disabled_columns: [‘anonce’,***]
relation:
NewRelation:
***
Слайд 11При этом мы можем задать общие для всех моделей настройки примерно так:
lib/config/model.yml:
disabled_behaviors:
-
‘I18n’
options:
collate: ‘utf8_unicode_ci’
charset: ‘utf8’
И нам не придется указывать это в конфигах моделей плагинов.
Слайд 12Чтобы плагин был действительно гибким, выборки должны автоматически адаптироваться под изменение схемы
данных.
Для этого добавляется серия методов в базовый класс таблицы, позволяющая управлять:
набором полей в выборках
допустимыми джойнами
Слайд 13Управление генерацией форм и фильтров
управление формами (вкл/выкл)
смена виджетов/валидаторов и их
опций
настройки форм (авто 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
Слайд 15Настройки по умолчанию для плагина вы можете задать в конфиге плагина:
yourPlugin/config/model.yml:
enabled_forms:
- ‘Model_1’
forms:
Model_2:
field_name:
false
Это позволит включить в плагине по-умолчанию самое необходимое, чтобы не указывать одно и тоже в каждом проекте.
Слайд 16Управление генерацией модулей
зависимость от изменения в модели
выбор типа UI и
темы
управление вложенностью модулей
управление доступом
поддержка UI в виде клиентских приложений на Sencha (ExtJS), Adobe AIR
Слайд 17Как и в случае с моделями, мы конфигурируем модуль примерно так:
lib/config/YourPlugin/module.yml:
all: #all
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
per page
Слайд 19Текущая версия плагина поддерживает jQuery UI, сортировку i18n полей в списках и
другие мелкие доработки.
Слайд 20В самом ближайшем будущем планируется имплементация существующих расширений модулей (например древовидные списки).
Слайд 21Как не заблудиться в конфигурационном лесу?
Слайд 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
Конфиги указаны в порядке перекрытия.
Слайд 23Возможности, поддерживаемые конфигурацией:
лаконичный набор команд
поддержка обоих принципов: «все включено» и
«все выключено»
генерация пустой структуры конфигов
ограниченная валидация
Слайд 24Опубликованные плагины:
Общие надстройки над фреймворком:
svn://dinecat.com/dinSymfonyExtraPlugin
Надстройки над Doctrine:
svn://dinecat.com/dinDoctrineExtraPlugin
Генерация административной панели:
svn://dinecat.com/dinAdminStdPlugin
Слайд 25Постепенно мной будут публиковаться также другие плагины, в том числе «универсальные» плагины
с общим для большинства проектов функционалом.
Плагины публикуются под лицензией MIT.
Я приглашаю всех, заинтересованных в разработке этих и других плагинов, к совместной работе в этом направлении.
Слайд 26В ближайшее время в сети появится два ресурса, использующих эти плагины:
http://maitavr.org/
Ассоциация разработчиков
http://aristotel.ua/
Благотворительный
аукцион