2016-11-29 9 views
0

У меня есть трудная проблема, которая требует ответа. Я работаю с 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

Я думаю, да. После того, как я установил Sonata, строка подсказки сказала мне ошибку на картинке 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' ] 

Очевидно, что если услуги имеют другие зависимости, вы также должны указать их.