2010-02-26 110 views
2

我对CakePHP相当陌生,在构建一个使用Auth组件的站点。有几次我试图做的事情与此组件已导致错误未定义的方法stdClass :: user()使用CakePHP时出错Auth

Fatal error: Call to undefined method stdClass::user() in /ftphome/site/app/controllers/users_controller.php on line 395 

在这种情况下,它指的是该生产线是

$this->User->read(null, $this->Auth->user('id')); 

当我恢复了这个错误不会消失代码回到错误发生之前,我似乎只能通过删除服务器上的某些文件来清除它(我不确定哪些文件,当我尝试删除tmp目录中的所有文件时,错误仍然存​​在所以我删除了整个网站,并从最新的svn revesion中恢复。

在这种特殊情况下,我想我通过将以下代码app_controller

class AppController extends Controller { 
    function beforeRender() { 
     $this->set('test', $this->Auth->user()); 
    } 
} 

这是我从这个线程http://groups.google.com/group/cake-php/browse_thread/thread/ee9456de93d2eece/cff6fe580d13622b?lnk=gst&q=auth

先前的时候,我试图通过更新验证导致问题复制造成的错误更新数据库中的用户之后的用户详细信息。

我可以看到我以某种方式从Auth对象中删除用户对象,但我无法理解为什么我需要删除站点中的文件以取回它或上面的代码如何删除它 - 任何帮助将是非常感激。

编辑

它看起来像我上面提到的情况下,问题是app_controller.php文件,我已经复制到我的app/controllers目录。只要有一个空的类声明的文件导致这个错误 - 任何人都可以提供进一步的洞察力?

进一步编辑

我已经意识到我已经有点傻了,问题就由我把app_controller.php/app/controllers/app_controller.php/app/app_controller.php已经有一个引起的 - 感谢输入尽管安迪,它有助于我更多地了解发生的事情。

回答

2

当一个类实例(在你的情况下是一个Auth的实例)已被序列化到磁盘,然后在另一个请求中重读/反序列化但类定义(即Auth)尚未加载时,通常会引发此错误,因此PHP将其创建为“stdClass”(标准类)。

当您删除站点文件时,您将删除会话存储(IIRC它是CakePHP应用程序中的Cache文件夹),因此在下一个请求时,新的会话从头开始创建。

自从我上次使用CakePHP(我切换到Zend)之后已经有一段时间了,所以我不记得Cake是否包含需要使用__autoload函数的文件。

在该邮件列表文章中,有人说您可以在视图中使用$ this-> Auth-> user(),但在控制器中,您可以使用$ session-> read('Auth.User')获取用户组件。不知道有什么区别,也许$ this-> Auth是一个视图助手,所以在控制器中不可用?

+0

正常抛出?你能提供任何引文吗?似乎这将是PHP,mod_php,Apache,APC或类似的东西中的错误。 – 2013-07-09 18:18:55

相关问题