Symfony:多个实体经理(奏鸣曲)

时间:2016-11-29 09:00:35

标签: symfony entity sonata-admin entitymanager

我有一个很难找到衣服的问题。我正在使用Symfony,我安装了Sonata来管理管理区域。完成后,我的提示行给出了这个错误:

This is the error

这是我的代码:

parameters:

services:       
    app.security.user_login_form_authenticator:
        class: AppBundle\Security\UserLoginFormAuthenticator
        autowire: true

    app.security.admin_login_form_authenticator:
        class: AppBundle\Security\AdminLoginFormAuthenticator
        autowire: true

请帮助我。

1 个答案:

答案 0 :(得分:0)

自动装配功能很方便,但它有局限性。

正如您所说,您有多个实体管理器实例。因此,Symfony不知道哪些应该注入您的服务。如果可以更改服务定义,则应设置autowiring_types参数以指定依赖项的默认实现。但通常实体管理器服务由DoctrineBundle定义,您无法直接配置它。 (据我所知,Doctrine配置不提供设置它的选项。)

因此,最简单的方法是手动指定实体管理器:只需将实体管理器服务ID(doctrine.orm.XXX_entity_manager)传递给服务的构造函数参数。

services:       
    app.security.user_login_form_authenticator:
        class: AppBundle\Security\UserLoginFormAuthenticator
        arguments: [ '@doctrine.orm.XXX_entity_manager' ]

    app.security.admin_login_form_authenticator:
        class: AppBundle\Security\AdminLoginFormAuthenticator
        arguments: [ '@doctrine.orm.YYY_entity_manager' ] 

显然,如果服务具有其他依赖关系,您还需要指定它们。