Codeigniter – ci框架浅析

Codeigniter PHP框架的MVC 代码结构, 算是比较简单和容易理解的,以下是一些浅析:

统一入口文件index.php

  1. 开发/生产环境配置,设置不同的报错等级;
  2. 设置目录常量:系统目录常量、应用目录、前台目录、View视图目录等;
  3. 设置默认时区或默认mb编码:
    //mb_internal_encoding('UTF-8');
    date_default_timezone_set('Asia/Shanghai');

核心框架类 CodeIgniter.php

  1. 根据环境加载不同config配置;
  2. 引入全局函数: 如load_class载入类的函数,获取配置、错误异常处理函数等;
  3. 设置接管error和exception:
    set_error_handler('_error_handler');
    set_exception_handler('_exception_handler');
    register_shutdown_function('_shutdown_handler');
  4. 是否启用composer autoload:
    require_once(APPPATH.'vendor/autoload.php')
  5. 载入核心类:benchmark、Hooks钩子、Config配置(全局变量$BM, $EXT, $CFG,),设置默认编码(mbstring, iconv, 5.6+的 php.internal_encoding);
  6. 载入其他核心类 Uri、Router、Output、Security、Input、Lang等, Router 解析获取相应的directory,class和method。
  7. Dispatch后执行
    $CI = new $class(); 
    call_user_func_array(array(&$CI, $method), $params);
  8. 视图输出渲染:
    $OUT->_display();
  9. 控制器方法中加载view:
    $this->load->view('/path/to/view', $view_data);

    其中loader的view方法中直接使用参数,输出模板:

    extract($view_data);
    ob_start();
    include('/path/to/view');
    
    //返回渲染内容或直接输出:
    if ($return === TRUE)
    {
       $buffer = ob_get_contents();
       @ob_end_clean();
       return $buffer;
    }
    
    if (ob_get_level() > $this->_ci_ob_level + 1)
    {
       ob_end_flush();
    }
    else
    {
       $_ci_CI->output->append_output(ob_get_contents());
       @ob_end_clean();
    }
  10. loader同时可以载入model,library等其他类。

Leave a Reply

Your email address will not be published. Required fields are marked *