Php 无法向SecurityContext注入服务
我看过很多关于这方面的帖子,但我不明白我做错了什么 services.yml:Php 无法向SecurityContext注入服务,php,symfony,Php,Symfony,我看过很多关于这方面的帖子,但我不明白我做错了什么 services.yml: parameters: services: bar.menu_builder: class: Foo\BarBundle\Menu\MenuBuilder arguments: [ @security.context ] 菜单生成器: namespace Foo\BarBundle\Menu; use Symfony\Component\Security\Core\Sec
parameters:
services:
bar.menu_builder:
class: Foo\BarBundle\Menu\MenuBuilder
arguments: [ @security.context ]
菜单生成器:
namespace Foo\BarBundle\Menu;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Knp\Menu\FactoryInterface;
class MenuBuilder {
protected $securityContext;
protected $isLoggedIn;
public function __construct(SecurityContextInterface $securityContext) {
$this->securityContext = $securityContext;
$this->isLoggedIn = $this->securityContext->isGranted('IS_AUTHENTICATED_FULLY');
}
// other methods
}
但是没有传递SecurityContext,因为我得到了以下异常:
ContextErrorException:可捕获的致命错误:传递给Foo\BarBundle\Menu\MenuBuilder的参数1::\uu构造()必须实现接口Symfony\Component\Security\Core\securityContexterface,未给出任何接口
有什么想法吗?应该引用服务参数
parameters:
services:
bar.menu_builder:
class: Foo\BarBundle\Menu\MenuBuilder
arguments: ["@security.context"]
您是否在config.yml中导入security.yml?像这样:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
此外,您必须通过容器获取对象,如下所示:
$this->get('bar.menu_builder');
如果这不起作用,那么您可以尝试清空缓存,这样它将重新编译容器
Steffen我不确定自己是否完全理解为什么会出现这个问题(我仍然是Symfony2的初学者),但我已经设法解决了这个问题 我已添加另一项服务来呈现菜单(请参阅): 并改变了:
{{ knp_menu_render('BarBundle:MenuBuilder:createMainMenu') }}
用于:
我认为,正如@Steffen Brem和@DonCallisto所建议的那样,
bar.menu\u builder
从未被检索到。只是出于好奇,因为我已经多次看到这个错误,每次都是导致这个错误的同一个问题,如何检索您的bar.menu\u builder服务?您能给我们一段相关的代码吗?请尝试清除缓存。或者检查您是否导入了服务。yml
{{ knp_menu_render('BarBundle:MenuBuilder:createMainMenu') }}
{{ knp_menu_render('main') }}