CI架構源碼閱讀筆記1,ci架構源碼筆記
最開始使用CI架構的時候,就打算寫一個CI源碼閱讀的筆記系列,可惜虎頭蛇尾,一直沒有行動。最近項目少,總算是有了一些時間去寫一些東西。於是準備將之前的一些筆記和經驗記錄下來,一方面權作備忘,另一方面時刻提醒自己:借鑒和學習才有出路,忘記過去意味著背叛!
基本術語說明
在本文開始之前,有必要對文中反覆出現的術語做一個簡單的說明,如果你對這一部分已經熟諳,完全可以略過。本文中反覆出現和提及的術語包括:
前端控制器(Front Controller):
用於集中控制使用者的所有請求的組件,將使用者的請求發送到具體的應用程式控制器。在CI架構中,指的是CodeIgniter類 。前端控制器本身是一種設計模式,詳細可參考《J2EE設計模式》。
應用程式控制器
應用程式控制器是具體的處理使用者請求URL的控制器,通常將一組相關的處理或者請求放置在一個應用程式控制器中,例如:UserController可能包含使用者的註冊、驗證、個人資訊、個人頁面等相關操作。
MVC
老生常談的一個術語,是一種代碼分層和組織模式。將代碼分為M(Model,商務邏輯),V(view ,視圖),C(Controller,控制器)等層次,便於將商務邏輯部分和視圖渲染部分分離,減少代碼的耦合。目前PHP中許多架構都基於MVC模式,如ZF,YII,CI等
Route路由
雖然名為Route,但這裡並不是路由器,而是指截取使用者的請求並將請求轉寄到特定的Controller處理的過程。不同的架構的路由不同,但基本原理相同。
Hook鉤子
最初的Hook是指“訊息傳遞中一個環節,用於監控訊息的傳遞,並在訊息處理之前,添加特定的處理”。這裡的Hook是指,在不改變架構核心源碼的基礎上增加或更改系統的核心功能,最典型的情況包括:在控制器載入之前或載入完成之後運行特定的指令碼。
CI架構配置
本文的基本環境:Linux x86_64 GNU/Linux .安裝了PHP(CGI)+Nginx+Mysql+redis(所以本文的許多伺服器相關的配置都是以Nginx為主,而暫時忽略Apache伺服器)。
首先下載CI架構的源碼,下載地址為:http://codeigniter.org.cn/downloads 目前穩定版本是2.2.0 。將源碼解壓到檔案夾(假設為/usr/nginx/html/CI 目錄)。
配置CI架構之前,先瀏覽一下架構的目錄結構:
其中:
Application : 應用程式的目錄,你的所有的應用代碼都應該位於這個目錄
index.php : 架構的入口檔案
static : 我們自己建立的目錄,放置一些CSS,image和js等靜態檔案(這完全可以放到application目錄下,看個人喜好)
system : CI架構的系統檔案,也是源碼閱讀的主要部分
user_guide : 使用者指導,類似於離線的使用者手冊。
CI架構需要配置的地方比較少:
1. 配置routes
Routes.php中配置的是預設的應用程式控制器和404頁面. 開啟application/config/routes.php檔案, 配置如下:
$route['default_controller'] = "index";$route['404_override'] = '';
2. 設定資料庫database.php
如果你的應用程式需要提供動態內容,那麼資料庫幾乎是必不可少的配置。開啟application/config/database.php檔案,該檔案內容如下:
CI架構是支援多資料流串連的,default是當前預設的串連,active_record用於指定是否啟用ARM(Active Record Model)。每個配置項非常簡明,這裡不再做過多介紹。
3. 去掉index.php
現在訪問你的應用程式,url應該類似於這樣:
test.xq.com/index.php/indextest.xq.com/index.php/welcome
注意每個請求都會帶有index.php段。去掉index.php會讓URI更加美觀。
開啟剛剛添加的test.xq.com.conf檔案,在server中添加如下配置:
if ($request_filename !~* /(favicon.ico|static|uploads|js|javascript|css|images|robots\.txt|index\.php|index\.html)){ rewrite ^/(.*)$ /index.php?$1 last;}
重啟伺服器後,現在,URL的訪問方式變成了:
test.xq.com/indextest.xq.com/welcome
是不是簡潔多了 :D
4. 添加.html訪問尾碼
可能還有人喜歡url中添加特定的尾碼,例如.html尾碼使你的應用程式更類似於一系列靜態檔案。配置方法是,在application/config/config.php中,更改如下配置為:
$config['url_suffix'] = '.html';
CI架構的更多配置可以參考:
配置Vhost
為了方便訪問(相比ip地址訪問的方式,網域名稱訪問有更好的可記憶性),我們可以配置vhost,配置方式為:進入nginx的vhost目錄,建立設定檔(本文中為test.xq.com.conf,一般情況下,我們的每個vhost都會以網域名稱命名)。在設定檔中輸入如下內容:
server { listen 80; server_name test.xq.com; root /usr/nginx/html/CI/; access_log logs/xq_access_log main; error_log logs/testsq.log error; charset GBK; index index.php; location ~ .*\.(php|php5)?$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; }}
Server中暫時沒有其他rewrite配置,稍後在配置CI架構的時候,我們可以添加更多的配置類支援CI的友好URL.
開啟本地的host檔案,在host中添加條目:
10.130.130.130 test.xq.com
其中10.130.130.130應該是你的伺服器的IP地址。
現在,在瀏覽器中可以通過網域名稱訪問CI架構了。
架構流程
在結束本文之前,我們再看看CI架構的基本流程,這個流程將貫穿源碼閱讀的始終,所以,很有必要認真研讀一下。引用CI架構使用者手冊的上的流程圖:
基本的執行流程如下:
下一步開始,將開始CI的源碼閱讀之旅。
誰可以解釋下這段php代碼ci架構的
這是類裡面的一個方法
功能是:瀏覽器使用post請求發送 shop_id到伺服器,這個 shop_id 就是資料庫中的manufacture_id,根據這個shop_id查詢資料庫,把查到的記錄以json格式字串的形式輸出到瀏覽器
php CI架構裡遇到的問題
提示Fatal error: Class 'Test_model' not found in D:\wamp\www\CodeIgniter_2.1.2\system\core\Loader.php on line 303
意思提示這個Test_model類找不到
你的類名寫錯了,當然找不到了
以下為model代碼,檔案名稱為test_model.php: (類名要與檔案名稱保持一致才行)
class Test_m extends CI_Model{ // 最好要大寫都大寫改成test_model
以下為contraller代碼,檔案名稱為user.php
$this->load->model('test_model'); 它載入的時候找不到class test_model
這樣就應該能成功
http://www.bkjia.com/PHPjc/899962.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/899962.htmlTechArticleCI架構源碼閱讀筆記1,ci架構源碼筆記 最開始使用CI架構的時候,就打算寫一個CI源碼閱讀的筆記系列,可惜虎頭蛇尾,一直沒有行動。最近...