-1

我在使用 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

我想我可能需要设置ContainerInterfaceDIC,但我不知道该怎么做(我试过但失败了,很惨)

有什么想法吗?

4

2 回答 2

4

对于新的 S2 开发人员来说,这实际上是一个很常见的误解。正如@KingCrunch 所说,S2 控制器没有构造,因此您的方法将失败。查看源代码:命名空间 Symfony\Bundle\FrameworkBundle\Controller\Controller,您会看到 Controller 扩展了组件 ContainerAware,它有一个名为 setContainer 的方法。如果你真的想要,你可以覆盖这个方法并做你想做的事。

然而,有一个专门为这类事情设计的事件系统,即在动作方法开始之前执行某些方法。可能想搜索一下有关此主题的其他问题。

S2.1 控制器现在有一个 getUser() 方法。我建议将它添加到您的基本控制器类中,而不用担心它。

于 2012-08-08T14:55:54.510 回答
1

不知道,你扩展了哪个类,但是 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 可以是一个完全独立的独立类。

官方文档非常糟糕!

文档建议在哪里调用父构造函数;)

于 2012-08-08T07:57:09.570 回答