写在前面: 既然是CI学习,当然要由浅入深,所以在说restful改造方案之前,先说说CI框架本身的哪些事儿。
CI 框架整体属于单例模式,为什么这么说?要是各位有心,在应用控制器中输出一下 $this 这个对象就会发现,CI框架的核心类实例基本都以属性的形式赋给了 $this 这个对象。
那 $this 这个对象有是什么? 其实他就是核心类(system/core中的类)中controller的实例,有心的同学看看这个类的实现方式就会知晓,CI将其他核心类的实例都赋值到了controller的属性上。所以,使用CI框架的核心就是要了解如何使用控制器对象即 $this 这个对象。
下面我们做一个小测试看看如何学会使用 $this 这个对象。 我们按部就班的来做,首先我们再 application/controller 下新建一个控制器类 本例使用:Index.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
* 类名符合CI命名规则,与文件名一致
*/
class Index extends CI_Controller{
/*
* 在本类里我们创建了一个默认方法
* 在index方法中我们打印了$this这个对象
*/
public function index(){
var_dump($this);
exit();
}
}
现在我们访问这个方法 http://hostname/index.php/index(控制器名)/index(方法名) 发现了吗?这个方法的输出和我上面的图片一样。 你会发现CI框架所有的核心类实例都以属性的形式附在控制器对象里面 所以我们就可以像调用普通属性一样调用他们。 例:
defined('BASEPATH') OR exit('No direct script access allowed');
/*
* 类名符合CI命名规则,与文件名一致
*/
class Index extends CI_Controller{
/*
* 还是index方法
*/
public function index(){
//加载试图文件
$this->load->view('视图文件名');
//加载扩展类
$this->load->library('扩展类名');
//调用配置文件属性
$config = $this->config->item('配置文件$config数组键名');
...
其他功能自己发掘
}
}
那我们从入口文件又是怎么实例化了这个controller并调用了index这个类的index方法呢,我们用一个图来展示
在CodeIgniter.php中 CI使用call_user_func_array(array(&$CI, $method), $params);来调用应用类。
了解了如何使用控制器,这也只是了解了如何使用CI框架本身,和我们主题关系并不大,但要实现对CI框架的改造,我们首先要对框架本身有一定了解,有了这些基础我们就可以开始来修改这个框架让它变成一个符合restful标准的框架。今天先写到这里,之后的系列文章会记录我的改造过程。