2011-05-17 2 views
2

Мы строим новый веб-сайт, который будет повторно использовать существующее программное обеспечение Symfony, используемое другим сайтом. Я перемещаю повторно используемые компоненты в плагин («приложение-плагин»), чтобы избежать дублирования кода и данных. Плагин будет настроен как svn-external в репозиториях svn веб-сайтов.Symfony: переопределить плагин-модель в другом плагине

Существующий экземпляр symfony содержит переопределенные классы доктрины (модели, формы, формы-фильтры), которые изначально определены в других плагинах (например, sfDoctrineGuardPlugin). Переопределенные классы могут повторно использоваться как symfony-экземплярами, поэтому я собираюсь переместить их в «app-plugin». Но это вызывает проблемы:

Если кто-то, например, запускает symfony doctrine:build-forms, перемещенные файлы будут воссозданы задачей внутри lib/form/doctrine и будут содержать пустые определения классов. Причина мне очень понятна: как Symfony предположил, что «приложение-плагин» уже определяет эти формы-классы? Единственный способ - автозагрузка всех классов перед выполнением задачи и проверка того, доступны ли классы уже.

Обходным путем было бы исключить эти классы в config/autoload.yml приложения-плагина. Но есть ли лучший способ?

Редактировать

Я использую термин «приложение-плагин», чтобы избежать путаницы между обычным плагином (например, sfGuard) и плагином, который содержит общие компоненты.


До:

dependencies before


После:

dependencies after

ответ

0

Кажется, нет лучшего способа, чем исключить исходную модель в app-plugin's config/autoload.yml. Даже если вы можете получить классы моделей, как показано на изображениях выше, у вас появятся проблемы, как только вы запустите задачу построения форм. Я просмотрел исходный код генератора форм, который показывает, что это невозможно. Поэтому единственными решениями являются: избегая задачи построения форм, переписывая генератор форм или, как уже было сказано, используя autoload.yml.

2

Что такое "приложение-плагин" вы говорите? Как правило, все, что вам нужно сделать, это оставить свои классы переопределения, где они есть, и переместить код, который они содержат в родительских классах, которые должны находиться в плагине. И если вы хотите изменить поведение для определенного приложения symfony, вы можете редактировать эти переопределенные классы.

+0

Я использовал термин «приложение-плагин», чтобы избежать путаницы между обычными плагинами (например, sfGuardPlugin) и нашим плагином, который содержит многократно используемые компоненты для обоих веб-сайтов. Переопределенные модели/формы sfGuardPlugin могут быть повторно использованы обоими веб-сайтами. Я не могу переместить переопределенные классы в sfGuardPlugin, который определяет родительские классы в этом случае. – fishbone

+0

@fishbone: Думаю, я лучше понимаю вашу проблему. Если вы не слишком неохотно редактируете sfGuardPlugin (я знаю, это плохая оценка), вы можете отключить автоматическую форму и генерацию фильтра в файле schema.yml, добавив «options: \ n symfony: \ n filter: false "поверх него и наследует файлы sfplugin в вашем приложении-плагине. Тем не менее, у вас все еще будет проблема с файлами модели. – greg0ire

Смежные вопросы