Symfony: переопределить плагин-модель в другом плагине - PullRequest
2 голосов
/ 17 мая 2011

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

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

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

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

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

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


До:

dependencies before


После того, как:

dependencies after

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Что это за «приложение-плагин», о котором вы говорите? Обычно все, что вам нужно сделать, это оставить свои переопределенные классы там, где они есть, и переместить код, который они содержат в родительские классы, которые должны быть в плагине. И если вы хотите изменить поведение определенного приложения Symfony, вы можете редактировать эти переопределенные классы.

0 голосов
/ 14 июня 2011

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

...