1、CI的文件結構;
瞭解CI的文件結構能夠幫助咱們快速的對CI框架有一個總體的認識,就好像咱們去了一個陌生的城市同樣,對你來說周圍的一切都是陌生和未知的,要想快速的瞭解這座城市,你能夠買一張這座城市的地圖,總體的瞭解這座城市的方位、結構和風景等等之類的。
2、CI是如何工做的。
咱們不光要對CI框架要有一個總體的認識,同時還要清楚CI是如何工做的,這樣才能快速的掌握和運用CI,還拿剛纔去一個陌生城市來講吧,若是你想很快的 適應和融入這座城市,是否咱們有必要知道一些關於這座城市的風土人情和文化習俗呢。我想仍是頗有必要的吧,畢竟咱們得入鄉隨俗呀。
固然,軍哥這裏只是簡單的介紹一下,讓你們有一個大概的思惟認知。
一、CI的文件結構。
你們還記得第一講中的CI目錄結構圖嗎,當時並沒怎麼詳細說明,咱們再來看一下。
根據上圖咱們能夠知道,CI主要組成部分爲,
application(應用文件夾)、
system(系統文件夾)和
index.php入口文件。
應用文件夾中主要是存放控制器、模型和視圖等,系統文件夾中主要是存放組成CI的核心文件的,index.php入口文件是一個單一入口文件,所謂單一文件是指在一個網站(應用程序)中,全部的請求都是指向的這麼一個文件,由它負責接收並處理URL中的控制器和方法。
換句話說, 它調用一個 '控制器', 而後返回一個'視圖'。
具體對單一入口文件的介紹我引用了高洛峯老師在BroPHP中對它的一個解釋。以下:
單一入口文件:
在使用PHP過程化編程時,每一個PHP文件都能獨立訪問並運行,就像一個體育場有多個入口同樣,須要在每一個入口都要檢票和安全檢查。而採用單一入口模式進 行項目部署和訪問,不管完成什麼功能,一個項目只有一個統一(但不必定是惟一)的入口,就像一個體育場若是隻能從一個入口入場(程序是抽象的,一個入口和 多個入口效率是同樣的)控制起來則更靈活,幾乎沒有什麼缺點。使用主入口文件部署項目的優勢以下:
一、加載文件方便
在編寫和閱讀過程化程序代碼時,常常會遇到文件之間互相包含,其中包括PHP使用include包括函數庫和公共資源文件,也包括在HTML中使 用<link>和<script>加載CSS和javaScript文件。項目越大,文件越多越讓人感受頭疼,就像一張大網同樣 將文件交織在了一塊兒,不容易找到頭緒。而使用單一入口則解決這個難題,在項目應用中用到的任何一個文件,只要相對於單一入口文件的位置查找便可。
二、權限驗證容易
若是每一個PHP文件均可以獨立訪問,在作用戶權限驗證時就須要對每一個文件進行判斷。而採用單一入口則只須要在一個位置進行判斷便可。
三、URL重寫簡單
若是每一個PHP文件和不一樣目錄下的PHP文件均可以獨立訪問,則在Web服務器中對URL進行從新編寫時須要不少條規則。而採用單一入口則在URL重寫時只須要簡單的幾條規則便可。php
好,接着來具體看application(應用文件夾)、system(系統文件夾)中放了哪些文件以及它們的做用是什麼吧。
application :
cache 第一次安裝時爲空,若是你打開緩存設置,這個目錄存放緩存數據
config 存放配置文件,包含網站的基本配置信息
controllers 存放你項目的控制器目錄
core 該目錄能夠擴展系統的核心文件
errors 包含出錯信息頁,你沒必要修改這個目錄
hooks 首次安裝時爲空,用來存放你建立的鉤子。鉤子是 用來裝載其它文件的控制方法
helpers 輔助函數,你能夠對系統的輔助函數進行擴展
language 存放你本國語言的文件目錄
libraries 類庫,你能夠建立本身的類庫
logs 若是你設置打開了系統的錯誤日誌,日誌文件就默認保存在這個目錄
models 存放你項目的模型目錄
views 存放視圖的模板目錄
system :
core 存放系統核心文件
database CI框架的數據庫類的類庫文件
fonts 沒有在用戶手冊中介紹,存放水印圖像使用的字體
helpers 輔助函數,你能夠對系統的輔助函數進行擴展
language 存放英語的文件目錄
libraries 存放一些類庫的目錄,好比SESSION類、分頁類、圖像類等
應用文件夾(application)中,最重要的文件夾是config,該文件夾內有兩個須要關注的文件:config.php 和 database.php。
,其次是controllers、models和views文件夾,分別存儲你網站中的控制器、模型和視圖。
愛問問題的你可能會納悶CI爲何要這樣來設置文件結構,其實啊,爲何要把代碼放在這個目錄而不是那個目錄是沒有什麼理由好講,這就是CI裏的一種約定。
另外細心的你是否是又發現application和system有些文件夾是相同的呢,如core、helpers、libraries等。其實這也是由 CI結構約定的, 當你裝載一個輔助函數helper, 或類庫文件library, CI會在上述兩個目錄中查找,好比你要裝載一個類叫作無限分類的類Category, CI會先查找application/libraries目錄。若是這個目錄中不存在,CI會尋找system/libraries目錄。這意味着能夠通 過把同名的文件放入application目錄來取代CI核心庫的libraies, helpers。但不要輕易嘗試這樣作,由於這種高度的靈活性須要你擁有足夠多的CI使用經驗。
二、那CI是如何工做的呢?
上一節咱們快速的搭建好了一個CI網站,瀏覽器成功的顯示出一個歡迎界面。咱們不由要問那到底是如何顯示出來的呢?其實根據咱們前面對CI的介紹和結構分析以後,咱們不難發現這跟CI使用M-V-C模式和單一入口文件有關。
咱們來簡單分析一下:
例如當咱們訪問的時候,程序會依靠index.php來作大量的初始化工做,調用大量的基礎類庫,並根據index.php後面的參數來加載控制器和方 法,而後調用模型,加載視圖等內容信息。固然在這個例子當中index.php後面你並無看到任何參數,但這不表明就沒有參數存在,由於CI事先已經默 認指定好了控制器和方法的參數,這個默認的參數能夠本身指定,配置文件存放在application/config/routes中,該配置文件中包含下 列設置:
$route['default_controller'] = "welcome";$route['404_override'] = '';上述config文件,默認的控制器爲welcome,若是沒有指定方法,index方法會被默認指定。若是請求的控制器或方法不存在,則程序會轉 到「404」頁面。結果如圖所示:
另外須要進一步說明的是上述URL中方法(也稱爲函數)必須是前面那個控制器中存在的。或則說,你不可以在一個控制器內調用其它控制器內的方法。
咱們來總結一下CI處理URL的具體細節
(部分摘自CI中國論壇):
假如URL網址爲:/control/func/param1/param2/...
因此上面網址能夠理解爲:/控制器名/方法名/方法的參數1/方法的參數2/...
總結:軍哥對具體CI是如何工做的講解的仍是比較淺顯和籠統的,主要目的仍是先快速的帶你們創建起一個對CI的初步認識,更多的後面會逐漸來深刻。
好,這講就到這吧,下一講咱們來學習如何具體來寫一個控制器、方法和視圖,而後咱們本身寫一個你們都懂的例子——「Hello World!」app