Symfony 3.4 - переключиться на базу данных Dynami c из команды - PullRequest
1 голос
/ 20 апреля 2020

Недавно я занимался обновлением старого проекта с Symfony 2.7 до 3.4. В проекте используется настраиваемая мультитенантная установка, и для переключения между базами данных на основе поддоменов используется EventListener. Это работает, поскольку я могу определить приоритет этого EventListener в моем файле services.yml, чтобы он загружался перед любыми другими службами. При этом весь мой другой код использует эту базу данных, установленную слушателем.

    current_site_listener:
        class: AppBundle\Event\Listener\CurrentSiteListener
        arguments: ["@doctrine.dbal.default_connection", "%base_host%"]
        tags:
          - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 10 }

Пока все хорошо, но, к сожалению, logi c не работает ни с одной из моих команд, определяющих специалиста c. Эти команды используют параметр аргумента, чтобы определить, какую базу данных следует использовать. Поскольку я не могу определить приоритет для этих команд, другие службы уже загружены, и я не могу переопределить соединение с базой данных из команды. Приведенный ниже код - это то, что я использую как в команде, так и в EventListener, и прекрасно работает в последнем (а также отлично работает в Symfony 2.7 внутри команды).

        $connectionParams = array(
            'dbname' => $client['database_name'],
            'user' => $client['database_login'],
            'password' => $client['database_password'],
            'host' => $client['database_host'],
            'driver' => 'pdo_mysql',
            'charset' =>  'UTF8'
        );

        /** @var Connection $connection */
        $connection = $this->container->get('doctrine.dbal.default_connection');

        if ($connection->isConnected()) {
            $connection->close();
        }
        $connection->__construct(
            $connectionParams, $connection->getDriver(), $connection->getConfiguration(),
            $connection->getEventManager()
        );

Приведенный выше код работал нормально в Symfony 2.7, но я предполагаю, что между этой версией и Symfony 3.4 что-то изменилось в том, как работают сервисы, и я больше не могу их переопределять с моим текущим подключением к базе данных. Я не сталкивался с какими-либо изменениями по этому вопросу в документах по миграции и поэтому не знаю, как решить эту проблему. Я надеюсь, что у кого-то здесь есть какие-либо идеи или предложения о том, как это исправить.

Заранее спасибо и всего наилучшего,

Кевин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...