Php 如何在Symfony2中使用第二个数据库进行用户身份验证?
在我的Symfony 2.0应用程序中,我必须访问第二个包含用户数据的数据库。因此,我在config.*.yml中定义了两个数据库连接。我解决这个问题的方法是复制现有EntityUserProvider,并在services.yml中将其注册为服务,如下所示: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
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');
// ....
}
// ....
}