Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在控制器中声明一次变量,并将其应用于控制器的所有方法_Php_Codeigniter - Fatal编程技术网

Php 如何在控制器中声明一次变量,并将其应用于控制器的所有方法

Php 如何在控制器中声明一次变量,并将其应用于控制器的所有方法,php,codeigniter,Php,Codeigniter,我对codeigniter框架比较陌生,到目前为止我适应得很好。我很好奇是否有一条捷径可以达到我的最终结果。好吧,这就是眼前的问题 我正在使用这段代码$data['logged\u in']=$this->verify\u min\u level(1)验证用户是否已登录。我试图避免的是在控制器中的每一个其他方法中使用此代码,而是声明一次,并且它全局应用于控制器中的所有方法 我尝试过使用protected$data['logged\u in']=$this->verify\u min\u leve

我对codeigniter框架比较陌生,到目前为止我适应得很好。我很好奇是否有一条捷径可以达到我的最终结果。好吧,这就是眼前的问题

我正在使用这段代码
$data['logged\u in']=$this->verify\u min\u level(1)
验证用户是否已登录。我试图避免的是在控制器中的每一个其他方法中使用此代码,而是声明一次,并且它全局应用于控制器中的所有方法


我尝试过使用
protected$data['logged\u in']=$this->verify\u min\u level(1)
helpers
目录中创建一个helper文件。并定义一个函数来检查用户登录。像

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']
数组,现在在此处加载此帮助程序类


完成所有这些操作后,您的
已登录()
函数可用于
控制器
模型
视图
您可以在任何地方应用。

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

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 
    }

}

我认为您应该使用库来实现此功能

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

在“system\application\libraries”目录中创建文件“Auth.php”

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 */
}
if(!$this->auth->getUserId())
{
/*必须登录*/
}
如果(!$this->auth->getAuthLevel()<2)
{
/*没有权限*/
}

此方法与我的方法类似。