icebolt 发表于 2009-3-11 11:51:43

ci源码分析--libraries/Controller


<?phpif ( ! defined('BASEPATH')) exit('不允许直接访问');
class Controller extends Base {
var $_scaffolding = FALSE;
var $_scaff_table = FALSE;

function Controller()
{
parent::Base();
$this->_initialize();
log_message('debug', "Controller类初始化成功");
}
//初始化控制器
function _initialize()
{
//载入系统必须的类,方便子类通过$this调用
$classes = array(
       'config' => 'Config',
       'input'=> 'Input',
       'benchmark' => 'Benchmark',
       'uri'=> 'URI',
       'output' => 'Output',
       'lang'=> 'Language',
       'router' => 'Router'
       );
foreach ($classes as $var => $class)
{
   $this->$var =& load_class($class);
}
//载入loader类,这个类的功能是多个类的装载器,觉得autoloader意义不大,暂时去掉了
if (floor(phpversion()) >= 5)
{
   $this->load =& load_class('Loader');
}
else
{
   //因为php4对象是拷贝一份,所以这里和php5做一下兼容
   foreach (array_keys(get_object_vars($this)) as $attribute)
   {
    if (is_object($this->$attribute))
    {
   $this->load->$attribute =& $this->$attribute;
    }
   }
}
}

//初始化脚手架
function _scaffolding()
{
if ($this->_scaffolding === FALSE OR $this->_scaff_table === FALSE)
{
   show_404('脚手架不能用');
}

$method = ( ! in_array($this->uri->segment(3), array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete'), TRUE)) ? 'view' : $this->uri->segment(3);

require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
$scaff = new Scaffolding($this->_scaff_table);
$scaff->$method();
}

}

icebolt 发表于 2009-3-11 11:56:46

Controller类虽然不太长,但是所有的控制器都从这里继承,而大部分的mvc功能都是以他为起点,不过具体的函数在loader里面设定的

ewayfly 发表于 2009-5-9 14:20:44

顶顶顶。

xiangxiaodong 发表于 2011-1-30 14:50:32

狂顶一下
页: [1]
查看完整版本: ci源码分析--libraries/Controller