Мы строим новый веб-сайт, который будет повторно использовать существующее программное обеспечение Symfony, используемое другим сайтом. Я перемещаю повторно используемые компоненты в плагин («приложение-плагин»), чтобы избежать дублирования кода и данных. Плагин будет настроен как svn-external в репозиториях svn веб-сайтов.Symfony: переопределить плагин-модель в другом плагине
Существующий экземпляр symfony содержит переопределенные классы доктрины (модели, формы, формы-фильтры), которые изначально определены в других плагинах (например, sfDoctrineGuardPlugin). Переопределенные классы могут повторно использоваться как symfony-экземплярами, поэтому я собираюсь переместить их в «app-plugin». Но это вызывает проблемы:
Если кто-то, например, запускает symfony doctrine:build-forms
, перемещенные файлы будут воссозданы задачей внутри lib/form/doctrine и будут содержать пустые определения классов. Причина мне очень понятна: как Symfony предположил, что «приложение-плагин» уже определяет эти формы-классы? Единственный способ - автозагрузка всех классов перед выполнением задачи и проверка того, доступны ли классы уже.
Обходным путем было бы исключить эти классы в config/autoload.yml приложения-плагина. Но есть ли лучший способ?
Редактировать
Я использую термин «приложение-плагин», чтобы избежать путаницы между обычным плагином (например, sfGuard) и плагином, который содержит общие компоненты.
До:
После:
Я использовал термин «приложение-плагин», чтобы избежать путаницы между обычными плагинами (например, sfGuardPlugin) и нашим плагином, который содержит многократно используемые компоненты для обоих веб-сайтов. Переопределенные модели/формы sfGuardPlugin могут быть повторно использованы обоими веб-сайтами. Я не могу переместить переопределенные классы в sfGuardPlugin, который определяет родительские классы в этом случае. – fishbone
@fishbone: Думаю, я лучше понимаю вашу проблему. Если вы не слишком неохотно редактируете sfGuardPlugin (я знаю, это плохая оценка), вы можете отключить автоматическую форму и генерацию фильтра в файле schema.yml, добавив «options: \ n symfony: \ n filter: false "поверх него и наследует файлы sfplugin в вашем приложении-плагине. Тем не менее, у вас все еще будет проблема с файлами модели. – greg0ire