在深入了解 Symfony 本身的 SecurityBundle 之后,我发现了以下内容:
鉴于这是在您的 security.yml 中:
providers:
AdministrationUser:
entity:
class: AdministrationBundle\Entity\User
Symfony 将创建一个具有以下名称的服务:
security.user.provider.concrete.administrationuser
此服务使用 UserProviderInterface,当您获取此服务时,您可以简单地调用方法 loadUserByName 并找到您的用户。
所以您只需要知道您自己配置的提供者的名称,您就可以确定服务名称并获取它。
我处于更一般的情况,所以我在我的 bundle 的 Extension-class 中为该服务添加了一个别名:
// alias the user_provider mentioned
$container->setAlias('my_security_bundle.user.provider', new Alias('security.user.provider.concrete.' . strtolower($config['user']['provider'])));
其中 $config['user']['provider'] 来自 config.yml(并且需要在您的 Configuration 类中进行配置,但这是另一回事。
现在我可以简单地使用这个新别名,我将获得正确的服务来在 Controller 中找到我的用户,如下所示:
/** @var UserProviderInterface $userProvider */
$userProvider = $this->get('my_security_bundle.user.provider');
$user = $userProvider->loadUserByUsername('someone@somewhere.tld');