CodeIgniter簡單理解

作者:燁竹

學(xué)習(xí)起因:公司老是讓我做小需求,所以想學(xué)習(xí)一門較為輕量級的php框架,自己搭建的MVC框架老是出問題,所以在網(wǎng)上找了一段時間棒假,選擇CodeIgniter框架;

目錄結(jié)構(gòu)

myshop
|-----system                框架程序目錄
    |-----core          框架的核心程序
        |-----CodeIgniter.php   引導(dǎo)性文件
        |-----Common.php    加載基類庫的公共函數(shù)
        |-----Controller.php    基控制器類文件:CI_Controller
        |-----Model.php     基模型類文件:CI_Model
        |-----Config.php    配置類文件:CI_Config
        |-----Input.php     輸入類文件:CI_Input
        |-----Output.php    輸出類文件:CI_Output
        |-----URL.php       URL類文件:CI_URl
        |-----Router.php    路由類文件:CI_Router
        |-----Loader.php    加載類文件:CI_Loader
    |-----helpers           輔助函數(shù)
        |-----url_helper.php    url相關(guān)的輔助函數(shù)精盅,如:創(chuàng)建url的輔助函數(shù)
        |-----captcha_helper.php創(chuàng)建圖形驗(yàn)證碼的輔助函數(shù)
    |-----libraries         通用類庫
        |-----Pagination.php    通用分頁類庫
        |-----Upload.php    通用文件上傳類庫
        |-----Image_lib.php 通用圖像處理類庫
        |-----Session.php   通用session類庫
    |-----language          語言包
    |-----database          數(shù)據(jù)庫操作相關(guān)的程序
        |-----DB_active_rec.php 快捷操作類文件(ActiveRecord)
    |-----fonts         字庫
    
|-----application           項(xiàng)目目錄
    |-----core          項(xiàng)目的核心程序
    |-----helpers           項(xiàng)目的輔助函數(shù)
    |-----libraries         通用類庫
    |-----language          語言包
    |-----config            項(xiàng)目相關(guān)的配置
        |-----config.php    項(xiàng)目相關(guān)的配置文件   
        |-----database.php  數(shù)據(jù)庫相關(guān)的配置文件
        |-----autoload.php  設(shè)置自動加載類庫的配置文件
        |-----constants.php 常量配置文件
        |-----routes.php    路由配置文件
    |-----controllers       控制器目錄
        |-----welcome.php   控制器文件帽哑,繼承CI_Controller
    |-----models            模型目錄
        |-----welcome_model.php 模型文件,繼承CI_Model
    |-----views         視圖目錄
        |-----welcome.php   視圖模板文件叹俏,默認(rèn)后綴名為.php
    |-----cache         存放數(shù)據(jù)或模板的緩存文件
    |-----errors            錯誤提示模板
    |-----hooks         鉤子妻枕,在不修改系統(tǒng)核心文件的基礎(chǔ)上擴(kuò)展系統(tǒng)功能
    |-----third_party       第三方庫
    |-----logs          日志

|-----index.php             入口文件

url

相關(guān)文件: .htaccess 文件 config/config.php
application/config.php
application/config/routes.php

(:num) 匹配只含有數(shù)字的一段。 (:any) 匹配含有任意字符的一段粘驰;:any 會被轉(zhuǎn)換為 [^/]+ 屡谐, :num 會被轉(zhuǎn)換為 [0-9]+

$route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';

URL 的第一段是 "product" ,第二段是數(shù)字時蝌数,將重定向到 "catalog" 類的 "product_lookup_by_id" 方法愕掏,并將第二段的數(shù)字作為參數(shù)傳遞給它。
如果你使用逆向引用顶伞,你需要使用美元符號代替雙斜線語法

HTTP 動詞(GET饵撑、PUT、POST唆貌、DELETE滑潘、PATCH)
$route['products/(:num)']['DELETE'] = 'product/delete/$1';

移除 URL 中的 index.php

根目錄下添加.htaccess
<IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

控制器

相關(guān)文件: application/controllers/
application/config/routes.php 定義默認(rèn)控制器

重映射方法:_remap()如果你的控制包含一個 _remap() 方法,那么無論 URI 中包含什么參數(shù)時都會調(diào)用該方法挠锥。 它允許你定義你自己的路由規(guī)則众羡,重寫默認(rèn)的使用 URI 中的分段來決定調(diào)用哪個方法這種行為

處理輸出:_output()如果你的控制器含有一個 _output() 方法侨赡,輸出類將會調(diào)用該方法來顯示數(shù)據(jù)蓖租, 而不是直接顯示數(shù)據(jù)。該方法的第一個參數(shù)包含了最終輸出的數(shù)據(jù)

私有方法:將方法聲明為 private 或 protected 并且在方法名前加上一個下劃線前綴也可以讓該方法無法訪問

請不要將你的控制器命名為這些:
CI_Controller
Default
index
函數(shù)
is_php()
is_really_writable()
load_class()
is_loaded()
get_config()
config_item()
show_error()
show_404()
log_message()
set_status_header()
get_mimes()
html_escape()
remove_invisible_characters()
is_https()
function_usable()
get_instance()
_error_handler()
_exception_handler()
_stringify_attributes()
變量
$config
$db
$lang
常量
ENVIRONMENT
FCPATH
SELF
BASEPATH
APPPATH
VIEWPATH
CI_VERSION
MB_ENABLED
ICONV_ENABLED
UTF8_ENABLED
FILE_READ_MODE
FILE_WRITE_MODE
DIR_READ_MODE
DIR_WRITE_MODE
FOPEN_READ
FOPEN_READ_WRITE
FOPEN_WRITE_CREATE_DESTRUCTIVE
FOPEN_READ_WRITE_CREATE_DESTRUCTIVE
FOPEN_WRITE_CREATE
FOPEN_READ_WRITE_CREATE
FOPEN_WRITE_CREATE_STRICT
FOPEN_READ_WRITE_CREATE_STRICT
SHOW_DEBUG_BACKTRACE
EXIT_SUCCESS
EXIT_ERROR
EXIT_CONFIG
EXIT_UNKNOWN_FILE
EXIT_UNKNOWN_CLASS
EXIT_UNKNOWN_METHOD
EXIT_USER_INPUT
EXIT_DATABASE
EXIT__AUTO_MIN
EXIT__AUTO_MAX

視圖

相關(guān)文件:application/views/

加載視圖
$this->load->view('name');

向視圖添加動態(tài)數(shù)據(jù)
通過視圖加載方法的第二個參數(shù)可以從控制器中動態(tài)的向視圖傳入數(shù)據(jù)羊壹, 這個參數(shù)可以是一個 數(shù)組 或者一個 對象

數(shù)組:
$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('blogview', $data);

當(dāng)你使用對象時蓖宦,對象中的變量會轉(zhuǎn)換為數(shù)組元素

將視圖作為數(shù)據(jù)返回,默認(rèn)作為視圖返回

$string = $this->load->view('myfile', '', TRUE);

模型

相關(guān)文件:application/models/

加載并訪問模型
$this->load->model('models下面的模型方法位置',重命名油猫,是否自動連接數(shù)據(jù)庫/參數(shù)配置數(shù)據(jù)庫);
$this->model_name->method();

class Blog_controller extends CI_Controller {

    public function blog()
    {
        $this->load->model('blog');

        $data['query'] = $this->blog->get_last_ten_entries();

        $this->load->view('blog', $data);
    }
}

輔助函數(shù)

相關(guān)文件: system/helpers
application/helpers
application/config/config.php

加載和使用輔助函數(shù)
$this->load->helper('name');
name可以是字符串和數(shù)組

$this->load->helper(
    array('helper1', 'helper2', 'helper3')
);

CodeIgniter 類庫

相關(guān)文件:system/libraries/
application/config/config.php

$this->load->library('class_name')

name可以是字符串和數(shù)組

創(chuàng)建自定義庫類

初始化類時傳入?yún)?shù)
在加載類庫的時候稠茂,你可以通過第二個參數(shù)動態(tài)的傳遞一個數(shù)組數(shù)據(jù),該數(shù)組將被傳到 你的類的構(gòu)造函數(shù)中:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('someclass', $params);

如果你使用了該功能,你必須在定義類的構(gòu)造函數(shù)時加上參數(shù):

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Someclass {

    public function __construct($params)
    {
        // Do something with $params
    }
}

get_instance() 用來獲取CI 的全局超級對象睬关,CI 是單例模式的框架诱担,所有全局有一個超級對象。因?yàn)橹挥幸粋€實(shí)例电爹,所以無論這個函數(shù)使用多少次都不會消耗資源的蔫仙。一般來說,只有在helper或library中才使用get_instance

詳細(xì)用法:https://www.cnblogs.com/kenshinobiy/p/6118047.html

驅(qū)動器:

所在目錄:system/libraries/

驅(qū)動器是一種特殊類型的類庫丐箩,它有一個父類和任意多個子類摇邦。子類可以訪問父類, 但不能訪問兄弟類屎勘。在你的 控制器 中施籍,驅(qū)動器為你的類庫提供了 一種優(yōu)雅的語法,從而不用將它們拆成很多離散的類概漱。

詳細(xì)用法:http://www.cnblogs.com/star91/p/4893287.html

核心系統(tǒng)類:

相關(guān)文件:application/core
application/config/config.php
system/compat/core/CodeIgniter

每次 CodeIgniter 運(yùn)行時丑慎,都有一些基礎(chǔ)類伴隨著核心框架自動的被初始化。但你也可以使用你自己類來替代這些核心類或者擴(kuò)展這些核心類瓤摧。
大多數(shù)用戶一般不會有這種需求立哑,但對于那些想較大幅度的改變 CodeIgniter 的人來說,我們依然提供了替換和擴(kuò)展核心類的選擇

鉤子 - 擴(kuò)展框架核心

相關(guān)文件:application/config/config.php
application/config/hooks.php

CodeIgniter 的鉤子特性提供了一種方法來修改框架的內(nèi)部運(yùn)作流程姻灶,而無需修改 核心文件铛绰。CodeIgniter 的運(yùn)行遵循著一個特定的流程,你可以參考這個頁面的 應(yīng)用程序流程圖 产喉。但是捂掰,有些時候你可能希望在 執(zhí)行流程中的某些階段添加一些動作,例如在控制器加載之前或之后執(zhí)行一段腳本曾沈, 或者在其他的某些位置觸發(fā)你的腳本

自動加載資源

相關(guān)文件:application/config/autoload.php
application/config/config.php

CodeIgniter 的"自動加載"特性可以允許系統(tǒng)每次運(yùn)行時自動初始化類庫这嚣、輔助函數(shù)和模型。 如果你需要在整個應(yīng)用程序中全局使用某些資源塞俱,為方便起見可以考慮自動加載它們

公共函數(shù)

is_php($version):判斷當(dāng)前運(yùn)行的 PHP 版本是否高于或等于你提供的版本
is_really_writable($file):判斷是否可寫
config_item($key):訪問單個配置項(xiàng)
set_status_header($code[, $text = '']):用于手動設(shè)置服務(wù)器的 HTTP 狀態(tài)碼
remove_invisible_characters($str[, $url_encoded = TRUE]):防止在 ASCII 字符串中插入空字符姐帚,
html_escape($var)
可以接受字符串參數(shù)外,還可以接受數(shù)組參數(shù)障涯。
它在防止 XSS 攻擊時很有用罐旗。
get_mimes():返回 application/config/mimes.php 文件中定義的 MIME 數(shù)組的 引用
is_https():判斷是否是https
is_cli():
該函數(shù)會檢查 PHP_SAPI 的值是否是 'cli' ,或者是否定義了 STDIN 常量唯蝶。
function_usable($function_name)
檢查一個函數(shù)是否可用九秀,可用返回 TRUE ,否則返回 FALSE

兼容性函數(shù)

哈希相關(guān):
password_get_info — 返回指定散列(hash)的相關(guān)信息

password_hash — 創(chuàng)建密碼的散列(hash)

password_needs_rehash — 檢測散列值是否匹配指定的選項(xiàng)

password_verify — 驗(yàn)證密碼是否和散列值匹配

hash_equals — 可防止時序攻擊的字符串比較

hash_pbkdf2 — 生成所提供密碼的 PBKDF2 密鑰導(dǎo)出

錯誤處理

相關(guān)文件:index.php
config/constants.php

相關(guān)函數(shù)
生成錯誤信息:
show_error($message, $status_code, $heading = 'An Error Was Encountered')
show_404($page = '', $log_error = TRUE)找不到的文件路徑
log_message($level, $message)向你的日志文件中寫入信息

網(wǎng)頁緩存

相關(guān)目錄:application/cache緩存文件

開啟緩存
$this->output->cache($n);$n表示緩存更新時間單位分鐘

如果你需要手工刪除緩存粘我,你可以使用 delete_cache() 方法

$this->output->delete_cache('/foo/bar');

程序分析

相關(guān)文件:application/config/profiler.php

分析器類會在頁面下方顯示基準(zhǔn)測試結(jié)果鼓蜒,運(yùn)行過的 SQL 語句, 以及 $_POST 數(shù)據(jù)。這些信息有助于開發(fā)過程中的調(diào)試和優(yōu)化

啟用分析器 $this->output->enable_profiler(TRUE);

禁用分析器 $this->output->enable_profiler(FALSE);

以 CLI(命令行) 方式運(yùn)行

使用命令行的情況

使用 cron 定時運(yùn)行任務(wù)都弹,而不需要使用 wget 或 curl

通過函數(shù) is_cli() 的返回值來讓你的 cron 頁面不能通過 URL 訪問到
制作交互式的任務(wù)娇豫,例如:設(shè)置權(quán)限,清除緩存畅厢,備份等等

與其他語言進(jìn)行集成锤躁,例如可以通過 C++ 調(diào)用一條指令來運(yùn)行你模型中的代碼

應(yīng)用程序(模塊)

相關(guān)文件:index.php

$application_folder = 'application';

多環(huán)境處理

相關(guān)文件: index.php $_SERVER['CI_ENV']
.htaccess

如果將 ENVIRONMENT 常量設(shè)置為 'development' ,當(dāng)發(fā)生 PHP 錯誤時錯誤信息會顯示到瀏覽器上或详。與之相對的系羞,如果將常量設(shè)置為 'production' 錯誤輸出則會被禁用

在視圖文件中使用 PHP 替代語法

相關(guān)文件:config/config.php

Echo 替代語法

<? php  echo  $variable ;  ?>
可以寫成
<?= $variable ?>

控制結(jié)構(gòu)的替代語法(if、for霸琴、foreach椒振、while)

< ul >

<? php  foreach  ( $todo  as  $item ) :  ?>

    < li > <? = $item ?> </ li >

<?php  endforeach ;  ?>

</ ul >


<? php  if  ( $username  ===  'sally' ) :  ?>

< h3 > Hi Sally </ h3 >

<?php  elseif  ( $username  ===  'joe' ) :  ?>

    < h3 > Hi Joe </ h3 >

<?php  else :  ?>

    < h3 > Hi unknown user </ h3 >

<?php  endif ;  ?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市梧乘,隨后出現(xiàn)的幾起案子澎迎,更是在濱河造成了極大的恐慌,老刑警劉巖选调,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夹供,死亡現(xiàn)場離奇詭異,居然都是意外死亡仁堪,警方通過查閱死者的電腦和手機(jī)哮洽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弦聂,“玉大人鸟辅,你說我怎么就攤上這事≥汉” “怎么了匪凉?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捺檬。 經(jīng)常有香客問我再层,道長,這世上最難降的妖魔是什么堡纬? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任聂受,我火速辦了婚禮,結(jié)果婚禮上隐轩,老公的妹妹穿的比我還像新娘饺饭。我一直安慰自己,他們只是感情好职车,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般悴灵。 火紅的嫁衣襯著肌膚如雪扛芽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天积瞒,我揣著相機(jī)與錄音川尖,去河邊找鬼。 笑死茫孔,一個胖子當(dāng)著我的面吹牛叮喳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缰贝,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼馍悟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剩晴?” 一聲冷哼從身側(cè)響起锣咒,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赞弥,沒想到半個月后毅整,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绽左,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年悼嫉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拼窥。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡承粤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闯团,到底是詐尸還是另有隱情辛臊,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布房交,位于F島的核電站彻舰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏候味。R本人自食惡果不足惜刃唤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望白群。 院中可真熱鬧尚胞,春花似錦、人聲如沸笼裳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽山憨。三九已至拾给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允青,已是汗流浹背橄碾。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠锉,地道東北人法牲。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像琼掠,于是被迫代替她去往敵國和親拒垃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容