gpt4 book ai didi

Symfony 3 - 具有多个数据库连接的 EntityManager 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-01 08:23:53 26 4
gpt4 key购买 nike

我已经使用保护设置了一个自定义身份验证器并自动连接了服务。这是经过测试的,只配置了 MySQL 就可以正常工作。

我现在指定了第二个数据库连接(oracle),但是 Symfony 现在不允许在我的服务配置中 Autowiring ,因为它不知道在将 EntityManager 注入(inject)自定义 Authenticator 类时要使用哪个数据库连接。

知道如何配置依赖注入(inject)以使用特定的数据库连接,这样我就可以继续使用 AutoWire。

Unable to autowire argument of type "Doctrine\ORM\EntityManager" for the service "user.security.login_form_authenticator". Multiple services exist for this class (doctrine.orm.prism_entity_manager, doctrine.orm.baan_entity_manager).

这是我在 config.yml 中的教义配置
doctrine:
dbal:
connections:
prism:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/../var/data/data.sqlite"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: "%database_path%"
baan:
driver: oci8
host: "%baan_host%"
port: "%baan_port%"
dbname: "%baan_db_name%"
user: "%baan_user%"
password: "%baan_password%"
charset: AL32UTF8

orm:
default_entity_manager: prism
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
auto_mapping: true
prism:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: prism
mappings:
UserBundle:
type: annotation

baan:
connection: baan
mappings:
BaanBundle:
type: annotation

这是我的 Authenticator 类中的构造函数
 private $formFactory;

private $em;

private $router;


public function __construct(FormFactoryInterface $formFactory, EntityManager $em, RouterInterface $router)
{
$this->formFactory = $formFactory;
$this->em = $em;
$this->router = $router;
}

最佳答案

您可以扩展 Doctrine 的 EntityManagerDecorator , 实现 EntityManagerInterface并接受 EntityManager 的实例在它的构造函数中。

先扩展EntityManagerDecorator为您的每个连接上一次课。

namespace MyBundle\Service\Database;

use Doctrine\ORM\Decorator\EntityManagerDecorator;

class PrismEntityManager extends EntityManagerDecorator {}

class BaanEntityManager extends EntityManagerDecorator {}

然后在您的服务配置中,您需要手动连接这两个服务。
MyBundle\Service\Database\PrismEntityManager:
arguments:
$wrapped: '@doctrine.orm.prism_entity_manager'

MyBundle\Service\Database\BaanEntityManager:
arguments:
$wrapped: '@doctrine.orm.baan_entity_manager'

现在您只需为其中一项服务输入提示。

public function __construct(FormFactoryInterface $formFactory, PrismEntityManager $em, RouterInterface $router)
{
$this->formFactory = $formFactory;
$this->em = $em;
$this->router = $router;
}

关于Symfony 3 - 具有多个数据库连接的 EntityManager 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com