是的 - 我搜索了一个答案并花了几个小时与谷歌。但麻烦仍然是实际的
class IndexController extends Controller\CommonController
{
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
在config.yml
中shop.website.index_controller:
class: %shop.website.index_controller%
parent: shop.common.common_controller
arguments: [@service_container]
和
捕获致命错误:参数1传递给 Shop \ WebSiteBundle \ Controller \ IndexController :: __ construct()必须 实现接口 Symfony \ Component \ DependencyInjection \ ContainerInterface,没有给出, 呼唤 I:\ SF2 \ WWW \供应商\ symfony的\ symfony中的\ src \的Symfony \包\ FrameworkBundle \控制器\ ControllerResolver.php 在第77行并在中定义 我:\ sf2 \ www \ src \ Shop \ WebSiteBundle \ Controller \ IndexController.php一行 13
有人可以解释错误在哪里吗?
请在yml / annotaions中配置(导致配置的不同类型让我发疯)
提前致谢
P.S>更新了代码ID
services:
shop.common.common_controller:
abstract: true
class: %shop.common.common_controller%
arguments: ["@templating"]
和
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
class CommonController
{
protected $templating;
public function __construct(EngineInterface $templating)
{
$this->templating = $templating;
}
相同的结果(
答案 0 :(得分:5)
您是如何在路线中配置控制器的?
我感觉您没有使用“Controller as a service”符号:
my_controller:
pattern: /
defaults: { _controller: shop.website.index_controller:indexAction }
此语法与默认路由语法不同。看看here。
答案 1 :(得分:1)
您无需扩展任何其他文件/控制器。
首先删除延伸。
添加:
use Symfony\Component\DependencyInjection\ContainerInterface;
替换:
Container $container
到
ContainerInterface $container
答案 2 :(得分:1)
Posilbe的理由是下一个:
SF2直接调用你的类构造函数。但你应该说把它作为服务(提供所有服务选项作为调用/参数)
添加
/**
* @Route(service="shop.website.index_controller")
*/
class IndexController extends Controller\CommonController
{
private $container;
public function __construct(Container $container) {
$this->container = $container;
}shop.website.index_controller
重新开始
并注意Matthieu Napoli的回答
答案 3 :(得分:-1)
为什么要将容器注入控制器?
只需扩展Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller,您就可以访问以下任何服务:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class HelloController extends Controller
{
public function indexAction()
{
// ...
$myService = $this->get('my_service');
}
}