繁体   English   中英

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

[英]Symfony2 Cannot instantiate interface in 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

当然我清理了缓存。

将您的使用声明更改为;

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";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM