我希望有一个类来检查我指定的所有控制器上的登录.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中进行登录检查,它应该可以工作,但我不能让它工作任何人???
在我按照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)
你的逻辑是正确的,应该可行。这正是我在所有 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