Недавно я занимался обновлением старого проекта с 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 что-то изменилось в том, как работают сервисы, и я больше не могу их переопределять с моим текущим подключением к базе данных. Я не сталкивался с какими-либо изменениями по этому вопросу в документах по миграции и поэтому не знаю, как решить эту проблему. Я надеюсь, что у кого-то здесь есть какие-либо идеи или предложения о том, как это исправить.
Заранее спасибо и всего наилучшего,
Кевин