Symfony2无法在依赖注入中实例化接口

时间:2014-06-20 08:37:07

标签: php symfony dependency-injection

当我尝试在Symfony2中创建服务时遇到问题。

这是我的services.yml

services:
    Menu:
        class:  My\WebBundle\Classes\System\Menu        
        arguments: [@service_container]

这是我的服务菜单:

namespace My\WebBundle\Classes\System;

use Symfony\Component\DependencyInjection\ContainerInterface as Container;

Class Menu{
    private $container;

    public function __construct(Container $container) {                
        $this->container = $container;                
    }

    public function getMenu($section) {
        return "hello";
    }
}

当我在控制器中时:

$menu = $this->get('Menu');

我明白了:

  

FatalErrorException:错误:无法在... \ cache \ dev \ appDevDebugProjectContainer.php第1522行中实例化接口My \ WebBundle \ Classes \ System \ Menu

当然我清理了缓存。

1 个答案:

答案 0 :(得分:2)

将您的使用声明更改为;

use Symfony\Component\DependencyInjection\Container;

另外,我会重新声明用引号括起服务名称的参数。

services:
    Menu:
        class:  My\WebBundle\Classes\System\Menu        
        arguments: ["@service_container"]

我会问你为什么要注射整个容器 为什么不注入你需要的部件?

如果您还将控制器定义为服务,则可以通过将其注入控制器来访问您的菜单服务。

根据评论要求提供;

services:
        Menu:
            class:  My\WebBundle\Classes\System\Menu        
            arguments: ["@router"]

课程看起来像;

<?php 
namespace My\WebBundle\Classes\System;

use Symfony\Component\Routing\RouterInterface;

Class Menu{
    private $router;

    public function __construct(RouterInterface $router) {                
        $this->router = $router;                
    }

    public function getMenu($section) {
        return "hello";
    }
}