ci框架手冊來自:CodeIgniter中國官方手冊php
+++++++++++++++++++++++++++++++++++++html
教程 - 內容提要:web
--建立一個簡單新聞系統正則表達式
--教程主要介紹如下技術要點:數據庫
一、模型 - 視圖 - 控制器(Model - View - Controller)基礎知識api
二、URI路由基礎數組
三、表單驗證瀏覽器
四、使用「查詢構造器」執行基本的數據庫操做app
整個教程會被分拆成多個章節,每一個章節會介紹涉及到CodeIgniter的不一樣功能點:框架
一、加載靜態內容:此節主要介紹控制器(Controllers),視圖(Views)和路由(Routing)的基礎知識;
二、讀取新聞條目:此節開始介紹模型(Models)的相關知識,以及在模型中執行一些基本的數據庫操做;
三、建立新聞條目:此節主要介紹在CodeIgniter中執行高級數據庫操做,以及表單驗證的相關知識;
加載靜態內容:
Note:這篇教程假設你已經下載好CodeIgniter,並將其安裝到你的開發環境;
你要作的第一件事情是新建一個控制器來處理靜態頁面,控制器就是一個簡單的類,用來完成你的工做,它是你整個web應用程序的"粘合劑";
例如,當訪問下面這個URL時:
http://example.com/news/latest/10
經過這個URL咱們就能夠推測出來,有一個叫作「news」的控制器,被調用的方法爲「latest」,這個方法的做用應該是查詢10條新聞條目並顯示在頁面上。在MVC模式裏,你會常常看到下面格式的URL:
http://example.com/[controller-class]/[controller-method]/[arguments]
在正式環境下URL的格式可能會更復雜,可是如今,咱們只須要關心這些就夠了;
新建一個文件application/controllers/Pages.php,而後添加以下代碼:
<?php
class Pages extends CI_Controller{
public function view($page = 'home'){
}
}
?>
你剛剛建立了一個Pages類,有一個方法view並可接受一個$page參數。Pages類繼承自CI_Controller類,這意味着它能夠訪問CI_Controller類(system/core/Controller.php)中定義的方法和變量;
控制器將會成爲你的Web應用程序中的處理請求的核心,在關於CodeIgniter的技術討論中,這有時候被稱爲超級對象。和其餘的PHP類同樣,能夠在你的控制器中使用$this來訪問它,經過$this你就能夠加載類庫、視圖、以及針對框架的通常性操做;
如今,你已經建立了你的第一個方法,是時候建立一些基本的頁面模板了,咱們將新建兩個視圖(頁面模板)分別做爲咱們的頁腳和頁頭;
新建頁頭文件application/views/templates/header.php並添加如下代碼:
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
頁頭包含了一些基本的HTML代碼,用於顯示頁面的主視圖以前的內容。另外,它還打印出了$title變量,這個咱們後面講控制器的時候再講。如今,再新建個頁腳文件application/views/templates/footer.php,而後添加如下代碼:
<em>© 2015</em>
</body>
</html>
在控制器中添加邏輯:
你剛剛新建了一個控制器,裏面有一個view()方法,這個方法接受一個參數用於指定要加載的頁面,靜態頁面模板位於application/views/pages/目錄。
在該目錄中,再新建兩個文件home.php和about.php,在每一個文件裏隨便寫點東西而後保存他們。若是你沒有什麼好寫的,就寫「Hello World!」吧。
爲了加載這些頁面,你須要先檢查下請求的頁面是否存在:
public function view($page = 'home'){
if( !file_exists(APPPATH.'views/pages/'.$page.'.php')){
//Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); //Capitalize the first letter
$this -> load -> view('templates/header',$data);
$this -> load -> view('pages/'.$page,$data);
$this -> load -> view('templates/footer',$data);
}
當請求的頁面存在,將包括頁面和頁腳一塊兒被加載並顯示給用戶,若是不存在,會顯示一個「404 Page not found」錯誤。
第一行檢查頁面是否存在,file_exists()是個原生的PHP函數,用於檢查某個文件是否存在,show_404()是個CodeIgniter內置的函數,用來顯示一個默認的錯誤頁面。
在頁頭文件中,$title 變量用來自定義頁面的標題,它是在這個方法中賦值的,可是注意的是並非直接賦值給title 變量,而是賦值給一個&data數組的title元素。
最後要作的是按順序加載所需的視圖,view()方法的第二個參數用於向視圖傳遞參數,$data數組中的每一項將被賦值給一個變量,這個變量的名字就是數組的鍵值。因此控制器中$data['title']的值,就等於視圖中的$title的值。
路由:
控制器如今開始工做了!在你的瀏覽器中輸入[your-site-url]index.php/pages/view來查看你的頁面。當你訪問index.php/pages/view/about時你將看到about頁面,包括頁頭和頁腳。
使用自定義的路由規則,你能夠將任意的URI映射到任意的控制器和方法上,從而打破默認的規則:
http://example.com/[controller-class]/[controller-method]/[arguments]
讓咱們來試試。打開文件application/config/routes.php而後添加以下兩行代碼,並刪除掉其餘對$route數組賦值的代碼。
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
CodeIgniter 從上到下讀取路由規則並將請求映射到第一個匹配的規則,每個規則都是一個正則表達式(左側)映射到一個控制器和方法(右側)。當有請求到來時,CodeIgniter 首先查找能匹配的第一條規則,而後調用相應的控制器和方法,可能還帶有參數。
這裏,第二條規則中$routes數組使用了通配符(:any) 能夠匹配全部的請求,而後將參數傳遞給Pages類的view()方法。
如今訪問index.php/about 。路由規則是否是正確的將你帶到了控制器的view()方法?實在是太棒了!