Codeigniter扩展了核心类

Dak*_*aka 5 php codeigniter

我希望有一个类来检查我指定的所有控制器上的登录.Codeigniter版本是2.1.0,我有PHP 5.3.10

Hier是我如何设置的:我查看https://www.codeigniter.com/user_guide/general/core_classes.html 并将其设置如下:在/application/core/MY_Main.php中

class MY_Main extends CI_Controller {

function __construct()
{
    parent::__construct();
}
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有welcome.php

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

class Welcome extends MY_Main {

    function __construct()
    {
            parent::__construct();
    }
    public function index()
    {
            $this->load->view('welcome_message');
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我在MY-Main中进行登录检查,它应该可以工作,但我不能让它工作任何人???

Chr*_*cht 6

在我按照CI手册中的描述获得核心类的扩展之前,我需要将以下代码添加到/application/config/config.php.

代码来自http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . EXT );
    }
}
Run Code Online (Sandbox Code Playgroud)


lee*_*phy 2

你的逻辑是正确的,应该可行。这正是我在所有 codeigniter 网站上所做的事情。我的代码有点复杂,因为我的登录检查是从库中调用的(所以我必须调用$CI =& get_instance();然后$CI代替$this),但类似下面的内容应该适合您。logged_in只是用户登录时为会话数据集的一项指定的名称。

class MY_Main extends CI_Controller {

    function __construct()
    {
        parent::__construct();

        $session_data = $this->session->all_userdata();

        if(!isset($session_data['logged_in']))
            redirect('/login');
    }
}
Run Code Online (Sandbox Code Playgroud)

关于您上面的评论(http 500),不太确定那里发生了什么。您粘贴的代码不应该抛出这样的错误,因此可能会发生其他情况。尝试打开内置日志记录功能的 codeigniters。

http://codeigniter.com/user_guide/general/errors.html