Как использовать вторую базу данных для аутентификации пользователя в Symfony2? - PullRequest
1 голос
/ 23 сентября 2011

В моем приложении Symfony 2.0 я должен получить доступ ко второй базе данных, которая содержит пользовательские данные.Соответственно, у меня есть два подключения к базе данных, определенных в config _ *. Yml.Мой подход к этой проблеме состоял в том, чтобы в значительной степени продублировать существующий EntityUserProvider и зарегистрировать его как сервис в services.yml следующим образом:

services:
    security.user.provider.concrete.acme_provider:
        class: Acme\MyappBundle\Security\Core\Authentication\Provider\AcmeUserProvider
        arguments: [@doctrine.orm.entity_manager, Acme\MyappBundle\Entity\Users, 'username']

Пока это работает нормально, за исключением того, что он предоставляет мне объект по умолчаниюменеджер.Как я могу внедрить менеджер сущностей, который использует другое соединение с базой данных?Я предполагаю, что мне придется настроить его как службу, но я не знаю как.

1 Ответ

0 голосов
/ 07 декабря 2011

Если вы хотите использовать конкретный EntityManager в сервисе, введите весь реестр Doctrine в качестве аргумента, например:

services:
security.user.provider.concrete.acme_provider:
    class: Acme\MyappBundle\Security\Core\Authentication\Provider\AcmeUserProvider
    arguments: [@doctrine, Acme\MyappBundle\Entity\Users, 'username']

Затем в конструкторе сервисов воздействуйте на EntityManager, который вы хотите использовать в качестве свойства класса:

namespace Acme\MyappBundle\Security\Core\Authentication\Provider;

use Symfony\Bundle\DoctrineBundle\Registry;
// ....

class AcmeUserProvider implements UserProviderInterface
{
    private $em;
    // ...

    public function __construct(Registry $doctrine, $class, $property)
    {
        $this->em = $doctrine->getEntityManager('your_em');
        // ....
    }

    // ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...