CakePHP:在非对象上调用成员函数setFlash()

Cam*_*ron 29 php cakephp

尝试注销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
Run Code Online (Sandbox Code Playgroud)

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

function logout() {
    $this->Session->setFlash('Good-Bye');
    $this->redirect($this->Auth->logout());
}
Run Code Online (Sandbox Code Playgroud)

mtn*_*rop 66

看起来您没有在Users控制器中加载Session组件.

默认情况下应加载Session组件,但如果您在AppController中设置组件数组,则会覆盖默认值.

这意味着,如果你有

var $components = array();
Run Code Online (Sandbox Code Playgroud)

在AppController中,确保Session组件包含在那里:

var $components = array('Session');
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,还有一个Session助手.如果要在控制器中对会话执行操作,并且使用会话帮助程序在视图中对会话执行操作,则需要使用会话组件.如果您在控制器中使用Session组件设置flash消息,则必须使用Session帮助程序在视图中显示它. (4认同)
  • 谢谢:)我认为Session是一个帮手,包含在内而不是组件! (2认同)