Динамическое изменение соединения entity Manager на основе поддомена

#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() . Это может быть то, что вы ищете.