将tank_auth验证添加到codeigniter中的多个控制器

时间:2013-06-04 22:21:26

标签: php codeigniter tankauth

我有几个使用Tank Auth的控制器,如:

class Buscar_animal extends CI_Controller {


     function __construct()
    {
        parent::__construct();
        $this->load->database();
        $this->load->helper('url');
        $this->load->library('tank_auth');        
    }



    function index()
    {
        if (!$this->tank_auth->is_logged_in()) {
            redirect('/auth/login/');
        } else {
            $data['user_id']    = $this->tank_auth->get_user_id();
            $data['username']   = $this->tank_auth->get_username();
            $this->load->view('menu.php',$data);        
            $this->load->view('v_search',$data);        
            $this->load->view('footer');            
        }       
    }


    //:...Several other functions
}

我想知道如何应用条件:

if (!$this->tank_auth->is_logged_in()) {
                redirect('/auth/login/');
            } 

到我的所有控制器。

我在想改变所有控制器,比如

class Buscar_animal extends MY_custom_controller {

}

并在自定义中应用if逻辑。

有没有一种有效的方法呢?

1 个答案:

答案 0 :(得分:1)

由于在$this->tank_auth->is_logged_in() === FALSE的情况下确实限制了对控制器的访问,因此使用处理逻辑的构造函数定义abstract类是有意义的。

abstract class My_Controller extends CI_Controller
{
     public function __construct()
     {
         if ($this->tank_auth->is_logged_in() !== TRUE) {
            redirect('/auth/login/');
         }
     }
}

class Buscar_Animal extends My_Controller
{
    public function __construct()
    {
        parent::__construct();
    } 

    public function index()
    {
       $data['user_id']    = $this->tank_auth->get_user_id();
       $data['username']   = $this->tank_auth->get_username();
       $this->load->view('menu.php',$data);        
       $this->load->view('v_search',$data);        
       $this->load->view('footer');            
    }

}