Используйте провайдера цепочки, определенного из службы

Я использую несколько пользовательских провайдеров в моем приложении:

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

Решение

Глядя на код SecurityBundle, вы просто можете воспользоваться услугой security.user.provider.concrete.{name}так в твоем случае security.user.provider.concrete.chain_provider

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

По вопросам рекламы [email protected]