【问题标题】:CakePHP: Call to a member function setFlash() on a non-objectCakePHP:在非对象上调用成员函数 setFlash()
【发布时间】:2011-02-02 16:07:27
【问题描述】:

我在尝试注销我的 CakePHP 应用程序时收到以下错误:

Notice (8): Undefined property: UsersController::$Session [APP/controllers/users_controller.php, line 75]
Fatal error: Call to a member function setFlash() on a non-object in /Users/cameron/Sites/cakeapp/app/controllers/users_controller.php on line 75

这是第 74、75 和 76 行的代码:

function logout() {
    $this->Session->setFlash('Good-Bye');
    $this->redirect($this->Auth->logout());
}

【问题讨论】:

  • 我不明白这个错误。
  • 如果有“最没用的评论”的徽章,如果确定,#1 将采取:-P 很高兴正确答案如下。

标签: php cakephp


【解决方案1】:

您的用户控制器中似乎没有加载 Session 组件。

默认情况下应该加载 Session 组件,但是如果您在 AppController 中设置了 components 数组,这将覆盖默认值。

这意味着如果你有

var $components = array();

在您的 AppController 中,确保其中包含 Session 组件:

var $components = array('Session');

或者,如果您不想在应用程序范围内使用 Session 组件,您可以在用户控制器中加载它。

【讨论】:

  • 谢谢 :) 我认为 Session 是一个帮手,并且被包含在内而不是一个组件!
  • CakePHP 同时提供:SessionComponent 用于在控制器中使用会话,SessionHelper 用于在视图中使用它。
  • 其实还有一个Session助手。当您想在控制器中对会话执行操作时,您需要使用会话组件,并且您使用会话助手在视图中对会话执行操作。如果您在控制器中使用 Session 组件设置 Flash 消息,则必须使用 Session 帮助器将其显示在视图中。
  • 我在使用 cakephp 博客示例时也遇到了这个问题。我不确定启用 DebugKit 工具栏是否删除了会话。在这个答案的帮助下,我将 Session 附加到已经存在的数组中:class AppController extends Controller { public $components = array('DebugKit.Toolbar','Session'); }
  • 我们可以防止 any 属性被覆盖吗?就像我们可以做类似 parent::anyMethod();
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多