在我的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']
到目前为止这个工作正常,除了它为我提供了默认的实体管理器。如何注入使用其他数据库连接的实体管理器?我想我必须将其设置为服务,但我不知道如何。
答案 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');
// ....
}
// ....
}