Здравствуй, %username%.
Уже неоднократно, разрабатывая что-то на symfony framework, я сталкиваюсь с вопросом отделения плагинов одного приложения от другого внутри проекта. А нужно это для того, чтобы скажем плагины для приложения backend не грузились в приложении frontend. Что тут сложного скажете вы, да в общем-то ничего. Самый простой способ, который я нашел, это переопределить метод setup в классе backendConfiguration для примера.
Выглядеть это будет следующим образом:
Copy Source | Copy HTML
- <?php
-
- class backendConfiguration extends sfApplicationConfiguration
- {
- public function setup()
- {
- // подключаем нужные нам плагины
- }
- public function configure()
- {
- }
- }
-
Если идти этим путем мы получим независимую конфигурацию плагинов для каждого приложения, но в итоге получается что нам надо следить за плагинами в 3х разных файлах. А три файла у нас получается потому что, у нас 2 приложения (frontend, backend) и не забываем про cli, который смотрит только в projectConfiguration. Т.е. если какой-то из плагинов который вы запишите в скажем backend будет иметь возможность работы с консолью, то его обязательно надо будет прописать в projectConfiguration иначе работать он не будет.
С одной стороны это довольно удобно, таким образом мы можем делать изолированные приложения, которые можно переносить из проекта в проект, сильно не влезая в общие конфиги, но если делать цельный проект неподразумевающий таких переносов(может только я один такой ленивый).
В общем не долго думая, я решил сделать свой вариант загрузки плагинов для symfony framework, используя только projectConfiguration и вот что получилось:
Copy Source | Copy HTML
- <?php
-
- require_once '/usr/share/php/symfony/autoload/sfCoreAutoload.class.php';
- sfCoreAutoload::register();
-
- class ProjectConfiguration extends sfProjectConfiguration
- {
- public function setup()
- {
- $sfApplicationExists = sfConfig::get('sf_app', false);
- if (false === $sfApplicationExists)
- {
- $this->enableAllPluginsExcept('sfPropelPlugin');
- }
- else
- {
- // общие плагины для всех приложений
- $sfCommonPluginsArray = array ('sfDoctrinePlugin');
- if ($sfApplicationExists == 'backend')
- {
- $sfCustomPluginsArray = array(
- // плагины для приложения backend
- );
- }
- else
- {
- $sfCustomPluginsArray = array(
- // плагины для приложения frontend
- );
- }
- $this->enablePlugins(array_merge($sfCommonPluginsArray, $sfCustomPluginsArray));
- }
- }
- }
Данный метод не претендует на идеальное решение, крайне интересно послушать ваше мнение по данному вопросу и как его можно решить по другому.
P.S. без критики нет роста.