[英]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.