【问题标题】:Symfony: multiple entity manager (sonata)Symfony:多实体管理器(奏鸣曲)
【发布时间】:2017-04-13 04:40:25
【问题描述】:

我有一个难题想要回答。我正在使用 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

请帮帮我。

【问题讨论】:

  • 您的项目配置文件中是否定义了多个 EntityManger?
  • 我认为是的。我安装奏鸣曲后,提示行说我图片中的错误i.stack.imgur.com/ZrFCL.png

标签: symfony entity sonata-admin entitymanager


【解决方案1】:

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

正如您所说,您有多个实体管理器实例。因此,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' ] 

显然,如果服务有其他依赖,你也需要指定它们。

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 2015-02-24
    • 2020-12-08
    • 2015-07-22
    • 2018-01-14
    • 2017-06-03
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多