代码之家  ›  专栏  ›  技术社区  ›  Loftx

使用cakephp auth时出现未定义的方法stdclass::user()错误

  •  2
  • Loftx  · 技术社区  · 15 年前

    我对cakephpand还比较陌生,我正在使用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版本还原。

    在这种特定的情况下,我认为我是通过将以下代码放入 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用户详细信息,从而导致了此问题。

    我可以看到我正在以某种方式从auth对象中删除用户对象,但我不明白为什么我需要删除站点中的文件来取回它,或者上面的代码是如何删除它的-任何帮助都会非常感谢。

    编辑

    在我上面提到的情况下,问题是 app_controller.php 我复制到我的 app/controllers 目录。只使用带有空类声明的文件会导致此错误-是否有人能提供进一步的洞察力?

    进一步编辑

    我已经意识到我有点傻了,问题是由我 应用程序控制器.php 在里面 /app/controllers/app_controller.php 当已经有一个在 /app/app_controller.php -谢谢安迪的意见,这有助于我了解更多的事情。

    1 回复  |  直到 11 年前
        1
  •  2
  •   Andy Shellam    15 年前

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

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

    我上一次使用cakephp(我切换到zend)已经有一段时间了,所以我不记得cake是否包含使用uu autoload函数所需的文件。

    在邮件列表中,有人说您可以在视图中使用$this->auth->user(),但在控制器中,您可以使用$session->read(“auth.user”)获取用户组件。不确定区别是什么,可能$this->auth是一个视图帮助程序,因此在控制器中不可用?