Php 如何在Symfony2中使用第二个数据库进行用户身份验证?

Php 如何在Symfony2中使用第二个数据库进行用户身份验证?,php,authentication,symfony,Php,Authentication,Symfony,在我的Symfony 2.0应用程序中,我必须访问第二个包含用户数据的数据库。因此,我在config.*.yml中定义了两个数据库连接。我解决这个问题的方法是复制现有EntityUserProvider,并在services.yml中将其注册为服务,如下所示: services: security.user.provider.concrete.acme_provider: class: Acme\MyappBundle\Security\Core\Authenticati

在我的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']

到目前为止,它工作得很好,只是它为我提供了默认的实体管理器。如何插入使用其他数据库连接的实体管理器?我想我必须把它设置为一项服务,但我不知道如何设置

如果要在服务中使用特定的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');
        // ....
    }

    // ....
}