2013-08-04 3 views
1

У меня есть проект SaaS Symfony2 со многими пакетами и глобальное соединение с базой данных, определенное в config.yml. Теперь скажем, что конкретный клиент хочет какую-то пользовательскую функциональность. Поскольку я хочу, чтобы он был интегрирован с моим основным проектом, я решил создать новый пакет с кодом, специфичным для этого клиента. Для этого пакета могут потребоваться некоторые новые таблицы базы данных, но поскольку они специфичны для этого клиента, я создаю с ними новую базу данных.symfony 2 define doctrine connection на комплект

Затем мне нужно определить новое соединение доктрины. Вместо того, чтобы поместить все настройки coninction в основной config.yml (который может стать довольно запутанным, если у меня есть 10 клиентов с конкретным пакетом), есть ли способ определить его в каком-нибудь файле конфигурации внутри клиентского пакета ?. Таким образом, я могу легко инкапсулировать весь код клиента и конфигурации внутри пакета

Я думаю, что это возможно с помощью компонента Component Injection componentnet и с использованием Pass Compiler Pass для создания нового подключения к базе данных, основанного на файле параметров, определенных в но я не уверен, как это сделать. Также мне нужно определить некоторых слушателей, связанных с соединением (Doctrine Extensions), что делает задачу еще сложнее.

Я думаю, что у меня будет только один «пакет клиентов», активный в каждом запросе, поэтому, возможно, я могу определить какое-то «клиентское» соединение, а затем изменить строку соединения во время выполнения? (Ну, в этом случае мне нужно обязательно загрузить только правильный клиентский пакет, основанный на субдомене или что-то в этом роде).

Благодарим за помощь.

+0

Вы решили эту проблему в конце? Не могли бы вы объяснить, как вы это сделали? – Nis

ответ

-1

Посмотрите на \ src \ Acme \ DemoBundle \ DependencyInjection \ AcmeDemoExtension.php и папку \ src \ Acme \ DemoBundle \ Resources \ config * С этим вы можете загружать файлы yml или xml и устанавливать соединение с базой данных и которые вам нужны.

0

Вы могли бы начать с DoctrineExtension.php в/поставщике/Доктрина-расслоение/Doctrine/Bundle/DoctrineBundle/внедрение зависимость/

Он содержит два метода loadDbalConnection() и loadOrmEntityManager(), который загружает значения конфигурации и строить соединения и объектов Mappings. Вы можете скопировать код, который вам нужен, из этого класса.

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