繁体   English   中英

symfony2-如何覆盖控制器__construct

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM