当我尝试在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
当然我清理了缓存。
答案 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";
}
}