Symfony Doctrine перехватить соединение исключение - PullRequest
1 голос
/ 16 апреля 2020

Я работаю над проектом Symfony 5, и мне нужно создать новый класс (Dynami c) и передать ему соединение БД, если оно существует:

    $var = "name-of-my-connection";
    $this->container->get('doctrine')->getManager($var);

Не все эти классы нуждаются в соединении, в этом случае в doctrine .yaml для этого специфицированного класса c нет соединения с БД. Мне нужно перехватить эту ошибку: Doctrine Диспетчер ORM с именем "name-of-my-connection" не существует.

  • Как я могу это сделать?
  • Могу ли я получить список доступных соединений и сделать мою проверку в этом списке?

Спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Чтобы перехватить эту ошибку, вы можете поймать выброшенное исключение. В этом случае вы должны перехватить InvalidArgumentException.

try{
   $nonExistentManager = $this->getDoctrine()->getManager('foo');
} catch (\InvalidArgumentException $e) {
   //The foo manager does not exist, do something
   //Redirect ?
}

Если вы ищете список доступных менеджеров, вы можете использовать метод getManagers. Это вернет список массивов менеджеров. Ключами этого массива являются доступные имена:

$managers = $this->getDoctrine()->getManagers();
dd($managers);

этот код возвращает что-то вроде этого:

array:1 [▼
  "default" => Doctrine\ORM\EntityManager {#320 …11},
  "foo" => Doctrine\ORM\EntityManager {#321 …12},
  "bar" => Doctrine\ORM\EntityManager {#322 …12}
]
...