Php 使用从服务定义的链提供程序
我在我的应用程序中使用多个用户提供商:Php 使用从服务定义的链提供程序,php,symfony,dependency-injection,symfony-security,Php,Symfony,Dependency Injection,Symfony Security,我在我的应用程序中使用多个用户提供商: 安全性: 供应商: 供应链供应商: 链: 提供者:[实体,json] 实体: id:myapp.entity.user\u提供程序 json: id:myapp.json.user\u提供程序 现在我需要从服务加载一个用户 服务: myapp.my.service: 类别:AppBundle\Services\My 参数:[@the.defined.chain.provider] //AppBundle\Services\My 名称空间AppBundl
安全性:
供应商:
供应链供应商:
链:
提供者:[实体,json]
实体:
id:myapp.entity.user\u提供程序
json:
id:myapp.json.user\u提供程序
现在我需要从服务加载一个用户
服务:
myapp.my.service:
类别:AppBundle\Services\My
参数:[@the.defined.chain.provider]
//AppBundle\Services\My
名称空间AppBundle\Services;
我的班级
{
公共函数loadUser($username)
{
返回$this->userProvider->loadUserByUsername($username);
}
}
如何明确使用链提供程序?将提供程序初始化为服务,您可以对链提供程序执行相同操作:
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
因此,您将自己创建用户-提供者链作为一项服务(这实际上是安全包对您的配置所做的),并在两个地方使用它。通过查看,您只需使用服务
security.user.provider.concrete.{name}
,因此,在您的例子中,security.user.provider.concrete.chain\u provider
有趣的是,它会自动获取providers数组作为参数吗?是的。基本上,您得到了bundle,它定义了基本服务和配置选项。然后,它使用您的配置在容器中配置其服务/参数。在这里,您使用两个提供程序配置名为chain\u provider
的链提供程序,Symfony将知道它必须创建一个服务security.user.provider.concrete.chain\u provider
,并将您配置的提供程序用作它的第一个参数。很好!我也会检查的,谢谢如果我的回答对你有帮助,你能验证一下吗?我能检查的时候肯定会的