嘿大家我得到这个错误
“致命错误:在非对象上调用成员函数check() C:\ XAMPP \ htdocs中\ job_portal_cakephp \应用\控制器\元器件\ SeekerSessionComponent.php 在第4行“
组件代码(SeekerSessionComponent.php)
<?php
class SeekerSessionComponent extends Component{
function session_check(){
if(!$this->Session->check("id")){
die;
$this->redirect(array("controller"=>"Pages","action"=>"login"));
}
}
}
?>
控制器代码(PagesController.php)
App::uses('AppController', 'Controller');
class PagesController extends AppController {
public $name = 'Pages';
public $helpers = array('Html', 'Session');
public $uses = array("Job","Page","Seeker","Skill");
public $components = array("Sanitize","SeekerSession");
public function index(){
$this->SeekerSession->session_check();
$this->layout = "first_layout";
$jobs = $this->Job->query();
$this->set(compact("jobs"));
}
}
我有Pages控制器,它有索引功能,使用SeekerSessionComponent检查是否存在变量“id”的会话。
答案 0 :(得分:2)
基于链接: - https://book.cakephp.org/2.0/en/controllers/components.html#creating-a-component
您忘了在组件类代码中添加App::uses(Component, Controller);
。所以它应该如下所示: -
App::uses('Component', 'Controller');//missed
class SeekerSessionComponent extends Component {
public $components = array('Session');// missed
public function session_check(){
if($this->Session->check("id")){ // if id exist
return true; //return true
}
}
}
注意: -
组件功能必须是public
。
<强> 另外 强>
die;$this->redirect(array("controller"=>"Pages","action"=>"login"));
似乎代码不正确,您需要return
不停止执行或重定向到任何页面的内容。
答案 1 :(得分:0)
通过在上面提到的代码的第4行打印$ this-&gt;会话来检查。这返回一个空值意味着它不返回任何对象,然后你的代码尝试在null上调用check()函数。
<?php
class SeekerSessionComponent extends Component{
function session_check(){
echo "<pre>";
print_r($this->Session);
die;
/*if(!$this->Session->check("id")){
die;
$this->redirect(array("controller"=>"Pages","action"=>"login"));
}*/
}
}
?>