如何在控制器中声明一次变量,它适用于Controller的所有方法

时间:2015-03-28 09:03:57

标签: php codeigniter

我对codeigniter框架相对较新,到目前为止,我的调整很好。我很好奇是否有实现最终结果的捷径。嗯,这就是手头的问题。

我正在使用这段代码$data['logged_in'] = $this->verify_min_level(1);来验证用户是否已登录。我想避免的是在控制器中的每个其他方法中使用此代码,而是将其声明一次并且全局适用到控制器中的所有方法。

我尝试过使用protected $data['logged_in'] = $this->verify_min_level(1);而没有任何运气。我哪里出错了,我该怎么纠正呢?提前谢谢。

3 个答案:

答案 0 :(得分:1)

在类中声明一个变量并访问它......

class Class_name extends CI_Controller
{
    protected $logged_in;


    public function __construct()
    {
        $this->logged_in = $this->verify_min_level(1); // assign the value to variable
    }

    public function another_method()
    {
        echo $this->logged_in; // access the defined variable 
    }

}

答案 1 :(得分:0)

helpers目录中创建一个帮助文件。并定义一个检查用户登录的功能。喜欢

if( ! function_exists('is_logged_in') ) {
    function is_logged_in() {
        $CI =& get_instance(); 

        // Now you can load any module here with $CI
        // Check user and return appropriate data
    }
}

现在自动加载此帮助程序,以便您不需要每次都加载它,转到config/autoload.php并导航$autoload['helper']数组,现在在此处加载此帮助程序类。

完成所有操作后,is_logged_in() controllermodelview可以使用{{1}}功能。

答案 2 :(得分:0)

我认为你应该使用库来实现它。

创建库,知道如何使用会话和/或cookie,数据库进行用户授权,知道验证用户的级别。

创建文件" Auth.php"在" system \ application \ libraries" 。目录

class CI_Auth {

    var $obj;
    /**
     * Constructor
     *
     * @access  public
     */
    function CI_Auth()
    {
        /* here you get application's instance
        you can use it then as $this->obj->load->model('usermodel');
        $this->obj->usermodel->login($name, $pass);
        */
        $this->obj =& get_instance();
        /* init code using sessions, cookies, database */
    }

    function getUserId() {
        /* your code */
        return $user_id;
    }

    function getAuthLevel() {
        if ($this->getUserId()) {
            /* Your code */
            return $level;
        }

        return false;
    }
}

然后在system \ application \ config \ autoload.php中启用此库:

$autoload['libraries'] = array('database', 'session', 'auth');

现在您可以在任何控制器,模型或视图中使用它:

if (!$this->auth->getUserId())
{
     /* MUST LOG IN*/
}

if (!$this->auth->getAuthLevel() < 2)
{
     /* NO PERMISSIONS */
}