我已经使用guard设置了一个自定义验证器,并自动连接了服务。这是经过测试的,只需配置MySQL即可正常工作。
我现在已经指定了第二个数据库连接(oracle),但是Symfony现在不允许在我的服务配置中进行自动装配,因为它不知道在将EntityManager注入自定义身份验证器类时使用哪个数据库连接。
我知道如何将依赖注入配置为使用特定的数据库连接,以便可以继续使用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配置
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;
}发布于 2017-08-15 02:06:54
您可以扩展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;
}发布于 2017-03-27 17:13:27
我不知道我是否正确理解了您的问题,但是您可以为不同的数据库连接设置不同的配置,如下所示:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: smallint
custom:
driver: pdo_mysql
host: '%database_host2%'
port: '%database_port2%'
dbname: '%database_name2%'
user: '%database_user2%'
password: '%database_password2%'
charset: UTF8
mapping_types:
enum: smallint
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
auto_mapping: true
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: default
mappings:
EntityBundle:
type: annotation
alias: DBAlias
custom:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: custom
mappings:
EntityBundle:
type: annotation
alias: DBAlias现在,您可以使用doctrine.orm.custom_entity_manager传递您的自定义EntityManager。
发布于 2017-10-03 04:52:51
我想,我在DBAL连接方面遇到了与EntityManager相同的问题。我已经用一些代理类解决了这个问题--在下面的回答中描述:https://stackoverflow.com/a/46265170/6357312
任何问题都可以让我知道。
https://stackoverflow.com/questions/43041832
复制相似问题