使用从服务定义的链提供程序

时间:2015-07-24 09:13:34

标签: php symfony dependency-injection symfony-security

我在我的应用中使用了多个用户提供程序:

security:
    providers:
        chain_provider:
            chain:
                providers: [entity, json]
        entity:
            id: myapp.entity.user_provider
        json:
            id: myapp.json.user_provider

现在我需要从服务中加载用户

services:
    myapp.my.service:
        class: AppBundle\Services\My
        argument: [@the.defined.chain.provider]
// AppBundle\Services\My
namespace AppBundle\Services;
class My
{
    public function loadUser($username)
    {
        return $this->userProvider->loadUserByUsername($username);
    }
}

如何明确使用连锁提供商?

2 个答案:

答案 0 :(得分:1)

提供商初始化为服务,您可以对连锁提供商执行相同的操作:

services:
    the.defined.chain.provider:
        class: Symfony\Component\Security\Core\User\ChainUserProvider
        arguments: [ [ @myapp.entity.user_provider, @myapp.json.user_provider ] ]

然后在security.yml文件中,将提供者替换为:

security:
    providers:
        default: 
            id: the.defined.chain.provider

在您的服务文件中,请保留myapp.my.service

的示例

因此,您将自己创建用户提供程序链作为服务(实际上是安全捆绑包对您的配置所做的)并在两个地方使用它。

答案 1 :(得分:1)

通过查看the code of SecurityBundle,您可以使用服务security.user.provider.concrete.{name},因此在您的情况下security.user.provider.concrete.chain_provider