奥门新浦京官方网站Codeigniter的一些优秀特性总结

本文由码农网 –
邱康原创,转载请看清文末的转载必要,应接出席大家的付费投稿安顿!

新近备选接班更正二个别人用Codeigniter写的种类,即使以前也是有用过CI,不过是全然按着自身的意思写的,没按CI的生龙活虎对套路。用在大伙儿的门类,最棒仍然按框架规范来,所以照旧总计一下,免得未来人家再接手的时候见笑于人。

正文实例汇报了CodeIgniter自定义调控器MY_Controller用法。分享给大家供我们参考,具体如下:

方今再给八个应用程式写API,同期还要写相应的后台管理网址。为了方便开辟和代码组织与治本,作者调节选拔叁个现存的框架。Codeigniter由于其轻量轻易自定制的特色迷惑了本身,一路费用过来也会有差相当少年岁月了,写下局地和还好支付进程中的一些认识来与我们共勉。

1. 首先是 MVC

Codeigniter全部的调控器都必须要继承CI_Controller类,但CI_Controller类位于system目录下,不太有利修正。为便利做一些公用的拍卖,平时状态下大家会在core下创设MY_Controller,用来继续CI_Controller,从而项目中保有的调节器世袭MY_Controller。

开采工具

开拓工具有为数不菲,每种人的习贯也不一致。Eclipse一直是自己的最爱,那么怎么让Eclipse支持codeigniter呢?

先是那是个PHP项目,所以得让Eclipse辅助PHP。假诺你的微型机已经设置了PHP,那么最简便的做法便是在Eclipse的market space中找找PDT并设置。具体操作:Help -> Eclipse
Marketplace。在输入框中输入PDT,点击find,如图:

奥门新浦京官方网站 1

点击右下方的install,等待几分钟就可以。

几天前得以在Eclipse中写PHP了,可是对于codeigniter来讲,平时使用的口舌相似如下:

$this->load->model ( 'user_model' );

$this->input->post ('phone');

老是都要手动输入这么长的好像的话语对于追求连忙的人来表明确是不可取的,所以得让Eclipse帮忙codeigniter特定的代码提醒,富含Controller和Model。把之类代码增加到

system/core/
目录下的Controller文件中CI_Controller类的布局函数在此之前,那事实上便是张开

变量申明,Model文件也是同等操作。

 /**
       * @var CI_Config
       */

       var $config;

       /**
       * @var CI_DB_active_record
       */

       var $db;

       /**
       * @var CI_Email
       */

       var $email;

       /**
       * @var CI_Form_validation
       */

       var $form_validation;

       /**
       * @var CI_Input
       */

       var $input;

       /**
       * @var CI_Loader
       */

       var $load;

       /**
       * @var CI_Router
       */

       var $router;

       /**
       * @var CI_Session
       */

       var $session;

       /**
       * @var CI_Table
       */

       var $table;

       /**
       * @var CI_Unit_test
       */

       var $unit;

       /**
       * @var CI_URI
       */

       var $uri;

       /**
       * @var CI_Pagination
       */

       var $pagination;

今昔效果如下:

奥门新浦京官方网站 2

只需输入$this 就可以产生代码提醒,成效进步不菲。

若是您还不亮堂 MVC ,应该尽早的就学,你会相当慢的认识到在 Model
中多少访谈,在 Controller 中张开张务逻辑,在 Views 中编辑 HTML
代码的股票总市值。假设你早前从未利用过这种形式写进度序,你可能会皱起额头,可是你应该给本身尝尝那样做的时机。

那么,MY_Controller 平日会做些什么吧?

自定义接济函数和库

诚如一个种类中会有无数同样的逻辑,会接纳到同后生可畏的代码。即使每回都去复制粘贴不独有麻烦并且不便于后续修改,想到要求修正二个逻辑就要到各种文件里改过代码就感到骇人听闻(涉及到设计方式这一块了,值得大家上学)。所以你要善于利用那多少个自定义帮忙函数(helpers)和自定义的库(libraries)。把雷同的逻辑封装成函数大概类,每一次境遇同样的逻辑之时只需调用现有的helper或许library就可以,纠正也只须求在helper也许library中黄金时代处改换,不需求四处找代码。

举一个自个儿项目中的例子。API须求给APP发送的央浼重回json格式数据,那么在PHP中的大器晚成种达成情势便是:

echo json_encode ( $data);//$data 是array类型的数据

不过借使$data中包含中文字符的话,输出的json数据会把汉语产生Unicode编码,为了制止顾客端必要重新拍卖多少,需求步入叁个参数,即:

echo json_encode ( $data , JSON_UNESCAPED_UNICODE);//$data 是array类型的数据

如此那般就会出口原始的中文了。不过难点又来了,每趟都要写这么长后生可畏段代码实乃劳动,所以封装成一个相助函数。在application/helpers
文件夹中新建三个文书render_helper.php。在那之中代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

/**

 * 打印不转义中文的json

 * @param [array] $data

 */

function echo_json($data) {

       echo json_encode ( $data, JSON_UNESCAPED_UNICODE );

}

那正是说每一遍调用之时只需先在类中的布局函数载入该支持函数,如下:

$this->load->helper ( 'render' ); // 载入打印json的自定义辅助函数

就足以在本类的富有成员函数中动用该措施:

echo_json ( $data);

与上述同类省时省力(加上Eclipse的代码提示,你只需求输入echo,那些函数就足以出来了)。今后必要改正成编码后普通话,只怕调换来匈牙利语等等(奇异的必要~)你都足以只更正生龙活虎行代码,效用升高不菲。

一条施行法则是把越来越少的东西放进 Controller ,记住 D君越Y
法则:不要再一次造轮子。当在高出一个地方编写相符的代码时,应该依据它的品类来尝试编写四个library, helper,或 model。举个例子数据库连接类,用得很频仍,就把它做成
model(系统已提供)。

负有的调节器都卫冕了MY_Controller,
MY_Controller平日会加载一些公用帮衬函数、公用类库,以至落实部分公用的法子。

长于缓存

只要一个APP的外向顾客不是得步提高,那么价值观的LAMP结构就能够应付了。然则随着顾客的慢慢增加,要想增强并发量,最佳照旧加四个缓存。在memcached和redis中,小编接收了redis,重要因为它数据类型更丰裕(不止帮助key-value型的数量,相同的时间还提供list,set,zset,hash等数据布局的积攒),能帮您兑现部分逻辑(防止再一次造轮子)。与Eclipse配置同理,首先得让Computer上的PHP能够和redis通信(假诺你的微电脑已经设置了redis),那么首荐的是phpredis增加,这里介绍一下自家在Debain服务器上的布局进程,实施的指令如下:

wget https://github.com/nicolasff/phpredis/archive/master.tar.gz  #下载扩展

tar xvf master.tar.gz      #解压目录

cd phpredis-master/     #进入解压后的目录

phpize

./configure --enable-redis

make && make install    #安装

#但是报错-bash: phpize: command not found(在使用apt-get install php5安装php时,默

#认是没有安装phpize的,我们安装phpredis时,需要用到phpize,因此,需要先安装#phpize。我们通过安装php开发者工具来获取phpize。执行如下命令即可: apt-get install #php5-dev)

ls  /usr/lib/php5/20100525/#根据安装提示的文件,结果:curl.so  gd.so  redis.so

vim /etc/php5/apache2/php.ini   #打开PHP配置文件

# Dynamic Extensions 后面添加extension=redis.so,因为上面命令结果显示有redis.so

/etc/init.d/apache2 restart       #重启Apache服务器

现行反革命PHP就能够和redis通信了,测量检验如下:

<?php

 $redis = new Redis();

 $redis->connect('127.0.0.1',6379);

 $redis->auth('你的密码');//为了安全,要给redis设置密码

 $redis->set('tom','hanks');

 echo ' tom:'.$redis->get('tom'). '</br>';// tom:hanks

echo 'will:'.$redis->get('will'); //will:

?>

好了,今后来到配置codeigniter使其可以利用redis的步调了。Codeigniter3.0.0本人有着redis协助,不过它完成的功能过于单生机勃勃,不可以知道知足本身的业务需要,所以应当要改进。但是最为不要直接在/system/libraries/Cache/drivers/Cache_redis.php
中期维改正,因为自此codeigniter晋级接收间接覆盖system文件夹的款式,会覆盖掉你的代码。所以最明智的做法还是要好创办一个库,具体步骤如下:

1、在application/config/redis.php 中插手配置消息:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

$config ['socket_type'] = 'tcp';

config ['host'] = '你的服务器域名或者IP';

$config ['password'] = '你的redis密码';

$config ['port'] = 6379;

$config ['timeout'] = 0;

2、在application/libraries中国建工业总会公司立如下图的文书构造

奥门新浦京官方网站 3

Rediscli.php 代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

class Rediscli extends CI_Driver_Library {

       public $valid_drivers;

       public $CI;

       function __construct() {

              $this->CI = & get_instance ();

              $this->valid_drivers = array (

                            'default'

              );

       }

}

Rediscli_default.php
代码从/system/libraries/Cache/drivers/Cache_redis.php
直接拷贝过来,唯大器晚成的不及是把类名从CI_Cache_redis改为Rediscli_default,那样就会依照合法的行使方法运用大家友好写的库。

3、未来得以在Rediscli_default.php中丰裕或许涂改章程,具体操作决计于你协和的行使的供给。比方在自己的接纳中,要求保持八个早晚长度的队列,所以在Rediscli_default类中增加如下四个办法:

/**

       * 弹出链表头元素

       * @param unknown $key,链表名              

       */

       public function lpop($key) {

              return $this->_redis->lPop ( $key );

       }

       /**

       * 插入元素到表尾

       * @param unknown $key,链表名              

       * @param unknown $value,待插入值              

       */

       public function rpush($key, $value) {

              return $this->_redis->rPush ( $key, $value );

       }

某些类须要调用该库时只需在其构造函数中增加如下代码:

$this->load->driver ( 'rediscli' ); // 加载redis自定义库

$this->rediscli->default->is_supported ();//判断是否支持redis并打开连接

则该类的各类函数就都能够采取Rediscli_default类中的任一方法,示比方下:

$this->rediscli->default->lpop('delnews');//弹出名为delnews的链表头元素

$this->rediscli->default->rpush('delnews',$nid);//该链表加入尾元素$nid

风流倜傥旦精通了 MVC 的精髓,那将会形成风流倜傥种习贯,你会从 MVC
简洁的代码中受益匪浅。

公用的形式?公有的格局?

登录逻辑的实现

对于大家的应用软件来讲,各类须要都要看清客商是还是不是已登入,对于登入的官方客户符合规律显示须求,对于未登录的客户提示“请首先登场陆”。平日的web应用使用cookie-session机制,常常的session都是以文件格局保留在服务器上,构思到文件访问慢于内存访问,大家可以配备codeigniter的session保存于redis中。笔者那边模仿这种机制:客户平常login后赶回三个特定的id和一定的token(你可以自定义爆发算法),服务器以id为key、token为value直接保存在redis中。未来的历次访谈应用软件都必需带上用appsecret(预订义)加密后的参数id和token,服务器端校验成功即健康重回数据,不然提醒“请先登陆”。

那么是还是不是各类类都须求写壹次检查登入的代码呢?当然不可能如此干,我们能够自定义多个基类,在该基类的结构函数中反省登陆状态(还是能在这里边加载常用的支援函数和库,例如上面包车型地铁render_helper

rediscli)。然后别的的政工逻辑的类就大浪涛沙该基类,并做到其自己逻辑就能够。

具体操作就是在 application/core
中新建文件 MY_Controller.php,该文件对应MY_Controller类(继承CI_Controller类)。该类只须求二个构造函数实现上述作用就可以。

接下来此外逻辑类只需一连MY_Controller类就不用再一次校验登入状态,而只需造成自己逻辑。

叁个尺码正是:复杂的操作都提交Model。Controller更像个建筑师。
Model是苦工。 View 是粉刷工。Controller
只须要把东西丢进Model里就能够了,无需留意数据是或不是充裕,然后重临三个标记位甚至相应的多寡。那样MVC
的 构培养反映出来了。

看样子那些方法会意识到三个主题素材,借使艺术是public的,那是还是不是能够通过浏览器访谈到。答案是足以的!那般不应当让客商访谈到的主意让客户访谈到了。那设置protected吧。。。

总结

Codeigniter是自己最怜爱的三个PHP框架(比较于thinkPHP,Zend
Framework等等),重要在于其易安装,轻量,易自定制的亮点。把握好这几个亮点,大家就会写出不逊于那个重量级框架写出来的利用,并且省时省力。

用作一个学子,在物色学习的中途还会有不菲难点亟待缓和,本文的意在和我们饮鸩止渴,更关键的是贵裔有啥样提出还是商量请一定多多支持哈,我的腾讯网:邱康singasong。

Model其实犹如叁个电器如:电磁炉相符,使用方法越简单越令人赏识,(把食品放进去
-按运转-ok,饭熟了。State of Qatar接口少的补益是,Model进级代码优化的时候,对外面包车型大巴耦合度不高。即便你内部写得很烂,接口也很绝望,用起来也简单。

备注:CI_Controller中写public方法不会被访谈到,框架节制了CI_Controller中方法通过浏览器访问。

2. Application 和 System 路径

乘势项目标穿梭开展,MY_Controller中的公用方法会更加的多。就算此刻要加进后台管理的据守,全部的调节器依旧三番三次MY_Controller,这里边的过多形式只怕不适用了。假使后台需求的大器晚成对公用方法也写在那,这里将会变得胡说八道。

最为是把 system 和 application 文件夹放在 webroot 以外的地点,假使index.php 放在 FTP 服务器的 /public_html/ 路线下,应该尝试把 System
放在根目录下 /system ,那样的话,只好通过 index.php 访谈你的PHP文件。

如何按模块区分差异的调整器?

并不是遗忘在index.php文件中期维改正 $system_folder 和 $application_folder
的值,$system_folder 的值应该是周旋于 index.php 文件,而
$application_folder 的值是相对于 system 目录。

有三种管理的形式,第朝气蓬勃种是由此区别的公用调整器文件来区分,由调节器去调整继续哪三个公用调整器,当然这里得引进公用文件。还应该有这种措施是足以由此对象的贰本性质来爱护,差异的模块付与该属性区别的靶子。如:

3. 错误报告和调节和测验

load->library('api_helper', NULL, 'helper'); break; case 'admin' : $this->load->library('admin_helper', NULL, 'helper'); break; default : $this->load->library('app_helper', NULL, 'helper'); break } }}/* End of file MY_Controller.php *//* Location: ./application/core/MY_Controller.php */

时不常犯的四个漏洞非常多是忘记关闭 PHP
错误和数据库错误报告,那样做是有高风险的。在别的一个公然的站点,error_reporting
应该设置为0 ,最八只可以设置为 E_ERubiconROPRADO,数据库设置 db_debug 应该安装为
false,基于别的安全思索,设置不展现出错音信 ini_set(‘display_errors’,
‘Off’);

调节器调用MY_Controller构造函数并传到type值,根据分化的type值会加载差异的类库,然后给类定义几个集结的外号,方便管理。具体的library能够拍卖该模块公用的办法或load公用的财富,相当于该模块的多少个公用类。当然管理格局也能够是一向通过路由中的目录名大概调整器名称来调节等等。

在您编码和调和时,应该把 error_reporting 设置为 E_ALL
,况且在把应用程序发表前化解每一个只顾和警戒。

这么幸免了加载不相同的文本,调用方法时只须求经过$this->helper对象调用。在稳重看看,能够窥见差别模块的公用类是献身library中,放在library或helper中都能够利用get_intance获取调节器对象,但老是使用都亟待获得实例,相对辛劳,若是是模型呢?认为也不太好。当中的公用方法有局地会跟职业逻辑相关,放在library认为不太合适。

后生可畏种轻松的法子是在 application/config/database.php 文件设置 db_debug
的值为二个常量 MP_DB_DEBUG,当网址在运营中,如下设置:

事务逻辑好像并不曾二个好的地点去贯彻,调整器的个人方法?模型?

复制代码 代码如下:
ini_set(‘display_errors’, ‘Off’);
error_reporting(0);
define(‘MP_DB_DEBUG’, false);

先计算下方面包车型大巴拍卖措施:

在编码和调度中装置为:

1、分裂模块之间能够按需加载以至贯彻自定义的公用方法,各种模块之间互不影响。若是各模块之间的公用方法超级多,也足以再去继续三个公用的类。

复制代码 代码如下:
ini_set(‘display_errors’, ‘On’);
error_reporting(E_ALL);
define(‘MP_DB_DEBUG’, true);

2、公用方法放在library中,调用CI实例不便于。

4. 咸鱼翻身难点很要紧

3、就算不爱好$this->herlper的调用方法,能够让控制器寿终正寝袭不一致的公用调节器,思路是相符的,只是恐怕需求手动引进文件。

在摄取任何数据到您的次序在此以前,不管是表单提交的 POST 数据、老董KIE
数据、U帕杰罗I 数据、XML-RPC 数据、依然 SEEvoqueVE纳瓦拉数组中的数据,大家都推荐您实行下边包车型客车四个步骤:

越多关于CodeIgniter相关内容感兴趣的读者可查阅本站专项论题:《codeigniter入门教程》和《CI框架进级教程》

过滤不良数据.
表明数据以保障符合科学的连串, 长度, 大小等.
(临时这一步骤也可代表第一手续卡塔尔(قطر‎
在付出数据到你的数据库此前将其转变.
有关SQL注入,XSS,以致 CSENCOREF
,你应有先精晓它们,再决定是不是利用方法来制止它们。能够参照CI手册上的平安指南
以至输入和安全类。可能最重大的规范是在把数量提交到数据库或文件系统早先检查有着客户的输入。

瞩望本文所述对大家基于CodeIgniter框架的PHP程序设计具有利于。

SQL注入。使用 CI 自带的 Active Record 能够解决这一个标题。
XSS (跨站脚本卡塔尔国。通过设置 $config[‘global_xss_filtering’] = TRUE;
开启自动过滤POST和董事长KIE中的跨站脚本攻击,但供给花销一些财富。也得以在历次管理POST和老总KIE的时候单独选拔,把第叁个参数设为TRUE,如
$this->input->post(‘some_data’, TRUE卡塔尔国; 表单验证类也提供了 XSS
过滤选项,如 $this->form_validation->set_rules(‘username’,
‘Username’, ‘trim|required|xss_clean’);
CSHighlanderF (跨站央浼杜撰卡塔尔(قطر‎。CI 2.0 将放置 CSENCOREF 检查,在 Google 上寻找 “CSLX570F
tokens” 学习更加多关于在保安表单提交和 UHighlanderL 链接的学问,在 Ajax
应用方面能够寻觅 “double cookie submission” 或 “双付给 cookie”。
SPAM
(垃圾留言和恶意注册State of Qatar。通过爱抚你的邮件表单,研究表单,以至任何各类免开销户提交的数目来防护垃圾音信,二个简易的办法是只同意贰个IP/User顾客端在一秒钟以内只可以交给叁次,叁个相比较好的主意是运用
Captcha ,CI第22中学放置了一个CAPTCHA的扶助函数。

5. 数据库 和 ORM

CodeIgniter 有多少个自带的库 Active Record 能够辅助您在不应用 SQL
语句的情状下写查询语句。那在你不太通晓 SQL
语句或不清楚如何防范SQL注入的情景下是一个很好的秘诀。

当您须求更刚劲的工具时,你能够构思选用 Object Relational Mapper
,正是处尊居显的 ORM 了,可惜的是,CodeIgniter 未有自带 ORM
库,然则也可以有部分任何很好的选用。

最流行的可能是 DataMapper OverZealous Edition (DMZState of Qatar,还足以行使 Doctrine
(这里有一个课程卡塔尔(قطر‎,另二个增选 RapidDataMapper 是作者本人的著述。

6. 代码履行

编排简洁的代码,并且精晓你的代码,不要只是复制粘贴旁人的代码,何况不只有增进编码技艺。手册上的支付标准是一个能读书怎么更加好编写代码的地点。

1.
DCR-VY。不要一而再重复造轮子,把能重用的代码放在它应有在之处,举例libraries,
helpers 恐怕是
models,并不是controllers,一个资历法规:当你复制代码的时候,只怕你早已第贰回把它身处了错误的地点。

  1. Caching
    (缓存卡塔尔。缓存是多个狠抓品质的很好的议程,越发是压缩数据库的探问。能够参见网页缓存和数据库缓存,恐怕在论坛上查找其余的可选方案,比如MP_Cache 是小编自个儿的作品。

  2. HTTP headers
    (HTTP尾部卡塔尔(قطر‎。在客商端你可以预知透过独立发送HTTP底部使浏览器缓存页面来增加品质,当您使用
    AJAX 的时候你也要求领悟它来禁绝浏览器缓存。

四个不许缓存的例证:

复制代码 代码如下:
$this->output->set_header(“Last-Modified: ” . gmdate(“D, d M Y
H:i:s”) . ” GMT”);
$this->output->set_header(“Cache-Control: no-store, no-cache,
must-revalidate”);
$this->output->set_header(“Cache-Control: post-check=0,
pre-check=0”, false);
$this->output->set_header(“Pragma: no-cache”);

贰个长日子维系缓存的例子(譬喻 css, javascript卡塔尔(قطر‎:

复制代码 代码如下:
$this->output->set_header(‘Cache-Control: private, pre-check=0,
post-check=0, max-age=2592000’);
$this->output->set_header(‘Expires: ‘ . gmstrftime(“%a, %d %b %Y
%H:%M:%S GMT”, time() + 2592000));
$this->output->set_header(‘Last-Modified: ‘ . gmstrftime(“%a, %d
%b %Y %H:%M:%S GMT”, time() – 20));

7. 模板渲染不必每一回都调用 header 与 footer

在 MY_Controller 头部和 __construct
函数中加上以下内容,用于设定暗中同意的模板消息,此中 SITE_NAME 须求团结在
application/config/constants.php 里面本身定义:

复制代码 代码如下:
class MY_Controller extends CI_Controller {
  protected $_data;    // 模版传值数组
  protected $_tplext;  // 暗许模版后缀
  protected $_header;  // 暗中认可底部模版
  protected $_footer;  // 私下认可尾部模版
  public function __construct () {
      parent::__construct();
      $this->_data[‘title’] = SITE_NAME;
      $this->_tplext = ‘.php’;
      $this->_header = ‘templates/header’;
      $this->_footer = ‘templates/footer’;
      // 开拓格局下展开质量解析
      if (ENVIRONMENT === ‘development’) {
          $this->output->enable_profiler(TRUE);
      }
  }
}

8. 没有必要全数的类都世襲 CI_Controller

增加生产能力的调整器不再继续 CI_Controller,而改世袭 MY_Controller:

复制代码 代码如下:
class Index extends MY_Controller {
  public function __construct () {
      parent::__construct();
  }
  /**
   * 前台首页
   */
  public function index () {
      $this->_data[‘title’] = ‘首页’;  // 不点名则选拔私下认可标题SITE_NAME
      $this->_view(‘index/index’);
  }
}

末尾,再补充七个:

9. CodeIgniter的公文布局

cache用以存款和储蓄缓存文件,codeigniter文件夹包罗了CI的基类CI_Base,为了协作php4和php5,CI_Base有多个版本,当中php4版本的CI_Base继承于CI_Loader。libraries里寄存了大多数常用的类库,最器重的多个类:Model,View和Cotronller,本身写的别的mvc都要三番五次于本来就有个别mvc类;helpers里是有个别函数(方法)集结,用以扶助其余模块的方便办事。language是八个语言包,用以扶持多语言。

application文件夹用以存款和储蓄您的应用程序,CI已经在里面为你扩展了一些子文件,饱含models、views、controllers、config、errors、hooks和libraries。在那之中前七个公文夹是用于创设模型、视图和调整器的。您的绝大好多办事都应当是创办归属自个儿的MVC,并可在config里投入配置文件,libraries里参与一些对象和办法,用来援救你的模子和调节器专门的学问。而hooks也是对CI_Hooks的扩张,具体内容见下边的章节。

10. CodeIgniter的劳作进度

当有贰个http央浼时,如http://www.google.com/blog/,首先步入CI的教导文件index.php。接下来我们看看index.php里做了何等职业。

index首先设置了应用程序的公文夹名字为application,系统的文件夹名称叫system,然后做了生机勃勃多级严俊的判定并调换为unix风格的服务器相对文件路线,具体说来定义了八个至关心珍重要的常量,APPPATH,应用程序的公文夹路线,依照解析可以知道,该路径能够和system同级:htdocs/application/,也足以放置system文件夹里面,作为其子文件夹:htdocs/system/application/,但推荐应用第二种艺术,这样显得相比井井有理;BASEPATH,网址文书档案的为主文件路线,写出来差不离是htdoc/system/;到终极,index指引文件引进了codeigniter/codeigniter.php里。接下来我们看看codeigniter里做了怎么样事情。

codeigniter.php风度翩翩上来就引进了七个公文:Common.php,Compat.php和config/constants.php,此中Common里含有了有个别函数,用于载入类库的load_class,记录日志的log_message,和引进错误页面包车型地铁show_404是多少个举足轻重的函数;Compat重要解决了php4和php5中的函数不宽容难题,而constants则定义了部分读写文件权限的常量。

随之codeigniter载入了第2个类库,Benchmark,这一个类库最轻易易行的四个行使正是计量网页从上马到编写翻译甘休所花掉的年月,所以您在编写翻译起先的地点打上三个标识,渲染停止后再打上一个符号,就能够算出里面花费的时日了。

紧接着载入了第三个类库,Hooks,那一个类库和Benchmark相通都是在systemlibraries下,那一个类库的遵循是在程序最初编写翻译从前给你提供一个实践其余交事务情的火候,Hooks会您实践其余任务提供了大概8个时机,具体参见顾客指南。在那间,它导入了第二个钩。

然后分别载入了Config,U纳瓦拉I,Router,Output等类库,接着,检查是还是不是有cache_override的钩,那些钩子能够允许你调节本身的函数来代替Output类的_display_cache方法,若无,直接调用Output的_display_cache,检查是否有缓存内容,假诺有,则间接出口缓存,退出;若无,则随之往下试行。

未来,继续载入Input,Language,注意此前载入的类库都以三个引用;然后又壹位命关天的载入,那就是CI_Base对象的载入,首先会咬定php的版本,若是是php4版本的,则会率先载入Loader,然后载入Base4,因为Base4中CI_Base继承于CI_Loader,而Base5中,CI_Base与CI_Loader没有继续关系。

下一步,也是真正首要的一步了,这一步伊始载入了三个Controller类,那些是个实例,并非引用;然后经过Router来剖判http地址,得到调控器和艺术的名字,接着看applicationcontrollers里是还是不是存在此样的调控器和办法,若无,则报错;如果有,则始于判定。

小结

先总计这么多,今后有再补偿。希望大家能投合意。

发表评论

电子邮件地址不会被公开。 必填项已用*标注