【问题标题】:Symfony2 Cannot instantiate interface in dependency injectionSymfony2无法在依赖注入中实例化接口
【发布时间】:2014-06-20 08:37:06
【问题描述】:

当我尝试在 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

我当然清理了缓存。

【问题讨论】:

    标签: php symfony dependency-injection


    【解决方案1】:

    将您的使用声明更改为;

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

    【讨论】:

    • 谢谢,我只需要用户路由器生成,就可以使用$this->get('router')。需要注射什么部位?
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多