【发布时间】:2017-12-07 20:35:18
【问题描述】:
我下载了 Symfony 的最新稳定版本 (3.3.3),但在启动时出现错误:
Attempted to call an undefined method named "getParameter" of class "AppBundle\Controller\DefaultController".
这是:
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
3.3.3 版本之前的 Symfony 控制器扩展
Symfony\Bundle\FrameworkBundle\Controller\Controller.php
现在扩展:
Symfony\Bundle\FrameworkBundle\Controller\AbstractController\AbstractController.php
那么...如何从容器中获取数据?在文档中(3.3 和 4.0 版本)Controller 扩展了 Controller,而不是 AbstractController。
如果我将 AbstractController 更改为 Controller 应用程序运行良好,但我应该更改吗?
【问题讨论】:
-
视情况而定。 AbstractController 仅提供对某些基本服务的访问。没有对容器的一般访问权限。这个想法是您将控制器定义为服务,然后注入您需要的任何其他服务/参数。检查手册中的自动接线。这是一个真正针对 Symfony 4 的重大变化。您可以继续使用“原始”控制器基类,一切应该和以前一样工作。查看 FrameworkBundle/Controller 代码也很有指导意义。
-
我也有同样的问题。安全模块的相同问题不起作用。我回到3.2.x版本
-
我在新生成的项目中遇到了同样的问题。运行 composer create-project 后已经直接坏掉了。