Php 无法向SecurityContext注入服务

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

我看过很多关于这方面的帖子,但我不明白我做错了什么

services.yml:

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') }}