symfony 2.3 在 __construct 函数中调用非对象的成员函数 get()

Posted

技术标签:

【中文标题】symfony 2.3 在 __construct 函数中调用非对象的成员函数 get()【英文标题】:symfony 2.3 Call to a member function get() on a non-object in __construct function 【发布时间】:2013-12-18 19:25:07 【问题描述】:

我的项目在带有 fosuserbundle 的 symfony 2.3 上运行。 我想在控制器中获取当前用户

$securityContext = $this->get('security.context');
$this->currentUser = $securityContext->getToken()->getUser();

如果我在indexAction() 中这样做,它就会起作用。 但是我在控制器的每个功能中都需要用户,所以我尝试将代码放在 __construct 函数中,现在它不再起作用了。

为什么我不能在构造函数中设置变量?

【问题讨论】:

$this->getUser() 就是你所需要的。看一下 S2 基础控制器类。您会注意到它没有构造函数,并且稍后会使用 setContainer 方法注入容器。这就解释了为什么将这种代码放在构造函数中不起作用。但同样,现有的 getUser 方法意味着您无论如何都不需要使用 consturcor, 哦,我明白了。感谢您的快速答复! 【参考方案1】:

在构造函数内部使用:

return $this->redirect('login');

不要使用:

   return $this->redirect($this->generateUrl('login'));

所以应该是这样的:

   class DefaultController extends Controller
   
     public function __construct()
     
           return $this->redirect('login');
           exit;

     

      /**
      * @Route("/", name="home")
      */
     public function indexAction(Request $request)
      

      
   

【讨论】:

以上是关于symfony 2.3 在 __construct 函数中调用非对象的成员函数 get()的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetada

Symfony-Catchable致命错误:传递给Doctrine Common Collections ArrayCollection :: __ construct()的参数1必须是类(代码

PDO::__construct():服务器向客户端发送未知字符集 (255)。请向开发人员报告

PDO::__construct():服务器向客户端发送未知字符集 (255)。请向开发人员报告

函数“LoginFormAuthenticator::__construct()”的参数太少,0 正好通过了 4 预期

PHP DateTime::__construct():当年份为三位数字时,无法解析时间字符串