我的CakePHP应用程序中存在一个问题,即我的AppController beforeFilter()函数中没有可用的Session对象,但只有当我在其中有Auth Component时。我有以下代码来设置网站的语言:
public function beforeFilter() {
$this->_setLanguage();
$locale = Configure::read('Config.language');
$path = APP . 'View' . DS . $locale . DS . $this->viewPath;
if ($locale && file_exists($path)) {
$this->viewPath = $locale . DS . $this->viewPath;
}
}
protected function _setLanguage() {
if (!$this->Session->check('Config.language')) {
$langLetters = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'en';
$browserLanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($browserLanguage){
case "en":
$this->Session->write('Config.language', 'en');
break;
case "pt":
$this->Session->write('Config.language', 'pt');
break;
default:
$this->Session->write('Config.language', 'en');
}
}
Configure::write('Config.language', $this->Session->read('Config.language'));
}
问题是,当我添加:
public $components = array('Auth');
我收到以下错误:
Fatal error: Call to a member function check() on a non-object in /home/brasilgameshow/www/teste_credenciamento/app/Controller/AppController.php on line 73
这是_setLanguage()函数的第一行。这意味着当Auth组件存在时,我根本就没有Session对象。任何人都可以提出一个不会影响Auth组件安全性的解决方法吗?我的意思是,只有在没有设置的情况下初始化新会话才是一个好的解决方案?
答案 0 :(得分:2)
默认情况下,如果您不添加任何组件,CakePHP将加载其默认组件(会话)
当您尝试调用自己的组件数组(在本例中使用Auth)时,您应该包含您可能需要的所有其他组件
答案 1 :(得分:0)
解决方案
当Ayman指出评论时,在AppController中添加自己的组件数组时,需要包含Session!谢谢!