Codeigniter - 使库自动运行

时间:2011-01-29 06:51:55

标签: php codeigniter

我有一个像这样的lib

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Iadmin {

    function check()
    {
        $CI =& get_instance();
        $CI->load->helper('url');
        $CI->load->helper('cookie');
        if(!get_cookie('lemon')){
            redirect('http://www.google.com/'); 
        }
    }
}

?>

在autoload.php中我有

$autoload['libraries'] = array('iadmin');

我想做什么:如果我没有cookie“柠檬”,当我尝试访问我网站的任何页面时,我将重定向到谷歌

问题:我没有被重定向到谷歌。

4 个答案:

答案 0 :(得分:4)

您可以使用MY_Controller扩展默认控制器,然后在所有控制器中扩展它。

在application / libraries / MY_Controller.php

<?php
    class MY_Controller extends Controller {
        function __construct(){
            parent::__construct();

            $this->load->helper('url');
            $this->load->helper('cookie');
            if(!get_cookie('lemon')){
                redirect('http://www.google.com/'); 
            }
        }
    }
?>

在application / controllers / home.php中

<?php   
    class Home extends MY_Controller {
        function __construct(){
            parent::__construct();
        }

        function index(){
            // Index page
        }
    }
?>

如果您没有柠檬饼干,请访问www.site.com/index.php/home会重定向您。

你也可以用钩子做这样的事情,但我不确定,因为我从未使用它们。

答案 1 :(得分:1)

在这种情况下你需要使用Hooks,而不是库。创建一个在加载任何控制器之前运行的钩子,并将代码放在钩子构造函数中检查cookie。

参考:http://codeigniter.com/user_guide/general/hooks.html

答案 2 :(得分:0)

在库中添加类之后,需要调用函数Check()使其执行或将该代码放在构造函数中。

答案 3 :(得分:0)

为什么不把这些代码放在Iadmin类'构造函数中?这应该可以解决您的问题,check方法不会自动调用。