我现在正在研究我的第一个symfony2项目.我已经创建了一个服务,我需要为每个控制器调用它来生成一个html,这在我的网站的所有页面中都是必需的.
所以我创建了一个BaseController类,它扩展了Symfony\Bundle\FrameworkBundle\Controller\Controller类,并尝试将代码放在这个BaseController类中.现在每当我从构造函数调用时:
$my_service = $this->get('my_service');
Run Code Online (Sandbox Code Playgroud)
要么
$my_service = $this->container->get('my_service');
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
Call to a member function get() on a non-object.
Run Code Online (Sandbox Code Playgroud)
容器对象尚未初始化.这个问题的解决方案是什么?如果我想在包含动态数据的所有页面中放置左侧面板或标题,如何在symfony2中遵循DRY方法?
提前致谢.
您不应该在控制器类中使用构造函数,特别是当您从Symfony Controller继承时:这样您在对象实例化后获取容器(DIC将调用从Symfony的Controller继承的setContainer方法).
通常,对于您的第一个实验,请使用操作方法中的服务; 如果你需要在每个请求中执行一些交叉逻辑,你可以考虑注册一些事件监听器(参见Symfony网站上的"Internals"文档).
当您对框架更有信心时,您可以开始考虑不继承Symfony的Controller,在DIC中注册控制器类并手动注入您需要的服务(最终在构造函数中实现某些逻辑).
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |