【发布时间】:2017-10-12 13:55:33
【问题描述】:
当我在控制器 (ClientDomainController) 中调用它时遇到了一个烦人的问题:
$this->getDoctrine()->getManager();
我收到了这个错误:
Call to a member function has() on null
我查看了堆栈跟踪,发现:
$this->container is null
我的控制器从 Symfony 控制器组件扩展而来:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
有趣的是,在另一个控制器(HomeController)中,我做了完全相同的事情:
- 从控制器扩展(完全相同的类)
- 获得教义
- 获取 EntityManager
- 使用管理器
这没有任何错误。
HomeController 和 ClientDomainController 之间唯一的区别是第二个是服务。所以我把它写在 services.yml 文件中:
services:
client_domain:
class: AppBundle\Controller\ClientDomainController
最后我测试了很多东西,比如为我的控制器创建一个构造函数并将其添加到 services.yml 文件中(从未对功能性文件做过的事情):
arguments: [ 'doctrine.orm.entity_manager' ]
【问题讨论】:
-
我认为您在 service 和 controller 之间感到困惑,您创建了一个 service 类,这样它就可以在控制器中使用,但我从未听说过像您所描述的那样的 服务控制器...虽然我不是 Symfony 专家
-
您要创建的服务是什么?
-
@teeyo 在 Symfony 中,将控制器定义为服务是很常见的,如果做得好,效果会很好。
标签: php symfony web symfony-3.3