2014-12-12 4 views
1

Можно ли изменить parameters.yml для каждого запроса на основе домена?Различные параметры.yml для каждого запроса в Symfony?

Я хочу использовать одно приложение для нескольких сайтов, которые отличаются только подключением к базе данных и ext.

Есть способ использовать что-то вроде parameters.php где я могу получить конфигурацию приложения на основе домена и других параметров запроса?

Как быть с кешем Symfony?

+0

вы используете Учение? – skafandri

+0

Да. Но как насчет других параметров, таких как почтовая программа? –

+0

Цитата из вашего вопроса "отличаются только соединением базы данных и ext" – skafandri

ответ

-2

Если вы используете доктрину, это может вам помочь.

Вы должны сначала определить оба соединения в parameters.yml

database.com_driver: 'pdo_mysql' 
database.com_host:  'com' 
database.com_port:  'port' 
database.com_name:  'com' 
database.com_user:  'com' 
database.com_password: 'com' 

database.net_driver: 'pdo_mysql' 
database.net_host:  'net' 
database.net_port:  'port' 
database.net_name:  'net' 
database.net_user:  'net' 
database.net_password: 'net' 

Затем вы определяете 2 DBAL соединения и менеджеров сущностей 2 ОРМ в вашем config.yml:

doctrine: 
    dbal: 
     connections: 
      com: 
       driver: %database.com_driver% 
       host:  %database.com_host% 
       port:  %database.com_port% 
       dbname: %database.com_name% 
       user:  %database.com_user% 
       password: %database.com_password% 

      net: 
       driver: %database.net_driver% 
       host:  %database.net_host% 
       port:  %database.net_port% 
       dbname: %database.net_name% 
       user:  %database.net_user% 
       password: %database.net_password% 
    orm: 
      com: 
       connection: com 
      net: 
       connection: net 

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

Пример использования контроллера:

class DefaultController extends Controller 
{ 
    public function listAction($domain) { 
     switch ($domain) { 
      case 'com': 
      case 'net': 
       break; 
      default: 
       //Handle error 
     } 
     $doctrine = $this->container->get('doctrine'); 
     /** @var \Doctrine\ORM\EntityManager $entityManager */ 
     $entityManager = $doctrine->getManager($domain); 
    } 
} 
+0

Нет, это действительно плохое решение. –

+0

Могу ли я узнать почему? – skafandri

+0

Как бороться с другими параметрами? Определите соединение в действиях контроллера. (БД может потребоваться раньше). –

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