我是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());
}
}
上一次我通过在更新数据库中的用户后尝试更新Auth用户详细信息来导致此问题。
我可以看到我以某种方式从Auth对象中删除用户对象,但我无法理解为什么我需要删除站点中的文件以将其取回或上面的代码如何删除它 - 任何帮助都会很多赞赏。
修改
在我上面提到的情况看来,问题是app_controller.php
文件,我将其复制到我的app/controllers
目录中。只是让文件包含空类声明会导致此错误 - 任何人都可以提供进一步的见解吗?
进一步修改
我已经意识到我有点傻了,问题是由于我app_controller.php
/app/controllers/app_controller.php
/app/app_controller.php
已经{{1}}中的问题引起的 - 感谢输入安迪,这有助于我更多地了解正在发生的事情。
答案 0 :(得分:2)
当一个类实例(在你的情况下是一个Auth实例)被序列化到磁盘,然后在另一个请求中重新读取/反序列化但是类定义(即Auth)尚未加载时,通常会抛出此错误,因此PHP将其创建为“stdClass”(标准类。)
当您删除站点文件时,您将删除会话存储(IIRC它是CakePHP应用程序中的Cache文件夹),因此在下一个请求时,将从头开始创建新会话。
自从我上次使用CakePHP(我切换到Zend)以来已经有一段时间了,所以我不记得Cake是否包含了使用__autoload函数所需的文件。
在该邮件列表帖子中,有人说您可以在视图中使用$ this-> Auth-> user(),但在控制器中,您可以使用$ session-> read('Auth.User ')获取用户组件。不确定区别是什么,也许是$ this-> Auth是一个视图助手,所以在控制器中不可用?