我在我的应用中使用了多个用户提供程序:
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);
}
}
如何明确使用连锁提供商?
答案 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