我正在 Symfony 中开发一个过滤器来跟踪用户在应用程序中执行的某些请求。为了检索当前用户,我使用以下getContext()
方法:
$user = $this->getContext()->getUser();
然后我尝试访问它的属性:
...
$username = $user->getUsername();
...
问题是 Symfony 引发了以下异常:在... sfGuardSecurityUser.class.php 中的非对象上调用成员函数 getUsername(),除非我以这种方式检索用户:
$user = $this->getContext()->getUser()->getGuardUser();
根据sfDoctrineGuardUser 文档(和源代码),有这样的代理方法:
public function getUsername()
{
return $this->getGuardUser()->getUsername();
}
为什么代理方法不起作用?
更新
经过几周的发展,问题再次出现。这次从使用$sf_user
变量的角度来看。我可以用
$sf_user->getGuardUser()->getId()
但不与
$sf_user->getId()
在我自己的回答中,下面是解释。