[英]symfony2 - how override controller __construct
我在Symfony2上遇到了一些麻烦。 即在如何使用__construct()
函数中。 官方文档非常糟糕!
我希望能够使用以下内容:
public function __construct()
{
parent::__construct();
$user = $this->get('security.context')->getToken()->getUser();
}
我怎么会遇到以下错误:
Fatal error: Cannot call constructor in /Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11
第11行是parent::__construct();
。 我将其删除并收到以下新错误
Fatal error: Call to a member function get() on a non-object in /Sites/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 242
我想可能需要设置ContainerInterface
DIC,但是我不知道该怎么做(我曾尝试过并失败了,可悲的是)
大家有什么想法吗?
对于新的S2开发人员来说,这实际上是一个普遍的误解。 正如@KingCrunch所说,S2控制器没有构造,因此您的方法将失败。 看一下源代码:命名空间Symfony \\ Bundle \\ FrameworkBundle \\ Controller \\ Controller,您将看到Controller扩展了组件ContainerAware,该组件具有一种称为setContainer的方法。 如果确实需要,可以覆盖此方法并执行所需的操作。
但是,有一个专门针对此类事情设计的事件系统,即在启动动作方法之前执行某些方法。 可能想搜索有关此主题的其他问题。
现在,S2.1控制器具有getUser()方法。 我建议将其添加到您的基本控制器类中,不要担心。
不知道,您扩展了哪个类,但是symfony控制器没有构造函数。 因此,它也正是像消息提示
Fatal error: Cannot call constructor in
/Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11
Line 11 is "parent::__construct();"
它不能调用构造函数,因为它不存在 。
public function __construct()
{
$user = $this->get('security.context')->getToken()->getUser();
}
值得注意的是,您甚至不需要扩展任何类或实现任何接口。 symfony2-controller可以是完全独立的独立类。
官方文档非常糟糕!
文档在哪里建议调用父级构造函数;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.