Привет, я рассмотрел пример использования двух разных подключений к базе данных из документации Symfony2: Документация по многочисленным подключениям Symfony2. Однако Symfony не находит диспетчера сущностей заказчика. (Параметры определены правильно)
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
customer:
driver: "%database_driver%"
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle: ~
customer:
connection: customer
mappings:
AppBundle: ~
Контроллер выглядит так:
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$em = $this->get('doctrine')->getManager();
$em = $this->get('doctrine')->getManager('default');
$em = $this->get('doctrine.orm.default_entity_manager');
// Both of these return the "customer" entity manager
$customerEm = $this->get('doctrine')->getManager('customer');
$customerEm = $this->get('doctrine.orm.customer_entity_manager');
return $this->render('default/index.html.twig', array(
'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..'),
));
}
Я должен получить диспетчер сущности заказчика, но, тем не менее, Symfony выбрасывает недопустимое исключение аргумента в сообщении.
[2015-10-19 23:19:18] request.CRITICAL: Uncaught PHP Exception
InvalidArgumentException: "Doctrine ORM Manager named "customer" does
not exist." at /srv/www/htdocs/symfony/my_project_name/app/cache
/prod/classes.php line 7344 {"exception":"[object]
(InvalidArgumentException(code: 0): Doctrine ORM Manager named
\"customer\" does not exist. at /srv/www/htdocs/symfony/my_project_name
/app/cache/prod/classes.php:7344)"} []
Я очистил кеш с помощью кеша приложений/консоли: ясно, но это не помогает.
Артамиэль имел правильный ответ в комментарии:
Symfony2 Doctrine ORM Manager с именем "клиент" не существует
cache: clear очищает среду dev по умолчанию, но, глядя на ваш журнал ошибок, вы получаете ошибку в своей среде prod. Чтобы очистить кеш в рабочей среде, добавьте флаг -e prod, как этот кеш: очистите -e prod и обновите страницу.
Во-первых, я думаю, достаточно одного объявления менеджера сущностей в вашем контроллере:
/ *** /
public function indexAction(Request $request)
{
$em = $this->get('doctrine')->getManager('default');
$customerEm = $this->get('doctrine')->getManager('customer');
/ *** /
}
Во-вторых, уверены ли вы, что вы можете объявить один и тот же пакет в конфигурации сопоставления (AppBundle: ~
в этом случае)?
cache:clear
очищает средуdev
по умолчанию, но, просматривая журнал ошибок, вы получаете сообщение об ошибке в вашей средеprod
. Чтобы очистить кеш в производственной среде, добавьте флаг-e prod
, например, такойcache:clear -e prod
и обновите страницу.