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

时间:2011-09-23 08:35:46

标签: php authentication symfony

在我的Symfony 2.0应用程序中,我必须访问包含用户数据的第二个数据库。因此,我在config _ *。yml中定义了两个数据库连接。我解决这个问题的方法是复制现有的EntityUserProvider并将其作为service.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 :(得分:0)

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

    // ....
}