#php #symfony #doctrine #symfony5
#php #symfony #доктрина #symfony5
Вопрос:
Я пытаюсь изменить соединение с БД на основе текущего поддомена. До сих пор мне удалось создать прослушиватель kernel.request и внедрить entity manager.
services.yaml
services:
app.listener.currentSubdomain:
class: AppEventListenerCurrentSubdomainListener
arguments: ['@doctrine.orm.entity_manager']
tags:
- { name: kernel.event_listener, event: kernel.request }
CurrentSubdomainListener.php
<?php
namespace AppEventListener;
use DoctrineORMEntityManager;
use SymfonyComponentHttpKernelEventRequestEvent;
class CurrentSubdomainListener{
protected $entityManager;
public function __construct(EntityManager $entityManager){
$this->entityManager = $entityManager;
}
public function onKernelRequest(RequestEvent $event){
//Change entity manager connection
}
}
Как я могу установить соединение entity manager внутри onKernelRequest(), чтобы при автоматическом подключении его к любым контроллерам он автоматически использовал установленное мной соединение?
Комментарии:
1. Я предполагаю, что это многопользовательская ситуация, и информация о соединении должна быть получена из базы данных? Тогда это своего рода уловка 22, если вам нужен доступ к базе данных для ее поиска, вы не можете заменить сервис после его создания. Вы могли бы создать свой собственный псевдоним, но я не уверен, что это будет без проблем, поскольку я не думаю
ManagerRegistry
, что они будут знать об этом новом менеджере.2. Не уверен, что вы пытаетесь сделать и почему. Динамическое изменение соединения мне не кажется хорошей идеей. Но, я думаю, что RequestEvent расширяет KernelEvent, у которого был метод GetRequest(), а Request имеет метод getHost() . Это может быть то, что вы ищете.