CakePHP致命错误:在非对象上调用成员函数check()?

时间:2017-03-01 06:30:35

标签: php session cakephp

嘿大家我得到这个错误

  

“致命错误:在非对象上调用成员函数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”的会话。

2 个答案:

答案 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"));
            }*/
        }
    }
    ?>