【发布时间】:2012-05-09 09:39:07
【问题描述】:
有没有办法使用
loadUserByUsername(UserProviderInterface 实现方法取决于安全配置)
通过服务或其他干净的方式从控制器操作?
我不使用 FOSUserBundle
谢谢!!
【问题讨论】:
有没有办法使用
loadUserByUsername(UserProviderInterface 实现方法取决于安全配置)
通过服务或其他干净的方式从控制器操作?
我不使用 FOSUserBundle
谢谢!!
【问题讨论】:
由于原生 EntityUserProvider 是 abstract,因此不可能...但是,如果您在自己的公共服务中定义方法 loadUserByUsername 并从 EntityUserProvider 调用它,则可以从任何 ContainerAware 类中使用它。
【讨论】:
AFAIK Symfony2 不能直接访问已注册的用户提供者。一种肮脏的方法是,在load() 的DependencyInjection/BundleExtension.php 方法中解析security.yml,例如
//DependencyInjection/BundleExtension.php
public function load(array $configs, ContainerBuilder $container)
{
//...
//parse security.yml
//create an array mapping each provider keys in the firewall to the providers
//set the array as global parameter using $container->setParameter('provider.mappings', $array)
}
然后在控制器中你可以做
$mapping = $this->container->getParameter('provider.mappings');
$providerKey = $this->get('security.context')->getToken()->getProviderKey();
$user = $mapping[$providerKey]->loadUserByUsername('user_name');
【讨论】: