Pull to refresh

symfony загрузка индивидуального набора плагинов для приложения

Reading time3 min
Views548
Здравствуй, %username%.

Уже неоднократно, разрабатывая что-то на symfony framework, я сталкиваюсь с вопросом отделения плагинов одного приложения от другого внутри проекта. А нужно это для того, чтобы скажем плагины для приложения backend не грузились в приложении frontend. Что тут сложного скажете вы, да в общем-то ничего. Самый простой способ, который я нашел, это переопределить метод setup в классе backendConfiguration для примера.

Выглядеть это будет следующим образом:
Copy Source | Copy HTML
  1. <?php
  2.  
  3. class backendConfiguration extends sfApplicationConfiguration
  4. {
  5.   public function setup()
  6.   {
  7.     // подключаем нужные нам плагины
  8.   }
  9.   public function configure()
  10.   {
  11.   }
  12. }
  13.  

Если идти этим путем мы получим независимую конфигурацию плагинов для каждого приложения, но в итоге получается что нам надо следить за плагинами в 3х разных файлах. А три файла у нас получается потому что, у нас 2 приложения (frontend, backend) и не забываем про cli, который смотрит только в projectConfiguration. Т.е. если какой-то из плагинов который вы запишите в скажем backend будет иметь возможность работы с консолью, то его обязательно надо будет прописать в projectConfiguration иначе работать он не будет.

С одной стороны это довольно удобно, таким образом мы можем делать изолированные приложения, которые можно переносить из проекта в проект, сильно не влезая в общие конфиги, но если делать цельный проект неподразумевающий таких переносов(может только я один такой ленивый).

В общем не долго думая, я решил сделать свой вариант загрузки плагинов для symfony framework, используя только projectConfiguration и вот что получилось:
Copy Source | Copy HTML
  1. <?php
  2.  
  3. require_once '/usr/share/php/symfony/autoload/sfCoreAutoload.class.php';
  4. sfCoreAutoload::register();
  5.  
  6. class ProjectConfiguration extends sfProjectConfiguration
  7. {
  8.   public function setup()
  9.   {
  10.     $sfApplicationExists = sfConfig::get('sf_app', false);
  11.     if (false === $sfApplicationExists)
  12.     {
  13.       $this->enableAllPluginsExcept('sfPropelPlugin');
  14.     }
  15.     else
  16.     {
  17.       // общие плагины для всех приложений
  18.       $sfCommonPluginsArray = array ('sfDoctrinePlugin');
  19.       if ($sfApplicationExists == 'backend')
  20.       {
  21.         $sfCustomPluginsArray = array(
  22.           // плагины для приложения backend
  23.         );
  24.       }
  25.       else
  26.       {
  27.         $sfCustomPluginsArray = array(
  28.           // плагины для приложения frontend
  29.         );
  30.       }
  31.       $this->enablePlugins(array_merge($sfCommonPluginsArray, $sfCustomPluginsArray));
  32.     }
  33.   }
  34. }


Данный метод не претендует на идеальное решение, крайне интересно послушать ваше мнение по данному вопросу и как его можно решить по другому.

P.S. без критики нет роста.
Tags:
Hubs:
Total votes 2: ↑1 and ↓10
Comments3

Articles