2016-11-29 131 views
0

我有一個難題,想要一個answear。我正在與Symfony合作,我安裝了Sonata來管理管理區域。當我完成這樣做,我的提示行給我這個錯誤:Symfony:多個實體經理(奏鳴曲)

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 

請幫助我。

+0

您是否在項目的配置文件中定義了多個EntityManger? – Forer

+0

我想是的。在我安裝了奏鳴曲之後,提示行告訴我圖片中的錯誤https://i.stack.imgur.com/ZrFCL.png –

回答

0

自動裝配功能很方便,但它有一定的侷限性。

正如你所說,你有多個實體管理器實例。所以,Symfony不知道應該將哪些注入到您的服務中。如果可以更改服務定義,則可以設置autowiring_types參數來指定依賴項的默認實現。但通常的實體管理器服務由DoctrineBundle定義,您不能直接配置它。 (據我所知,Doctrine配置不提供設置選項。)

因此,最簡單的方法是手動指定實體管理器:只需將實體管理器服務標識(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' ] 

顯然,如果服務具有其他依賴關係,您還需要指定它們。

相關問題