# 加載靜態內容
**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 首先查找能匹配的第一條規則,然后調用相應的控制器和方法,可能還帶有參數。
你可以在關于 URI 路由的文檔 中找到更多信息。
這里,第二條規則中 $routes 數組使用了通配符 (:any) 可以匹配所有的請求, 然后將參數傳遞給 Pages 類的 view() 方法。
現在訪問 index.php/about 。路由規則是不是正確的將你帶到了控制器中的 view() 方法?實在是太棒了!
- 空白目錄
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- 開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 向 CodeIgniter 貢獻你的力量
- 編寫 CodeIgniter 的文檔
- Developer's Certificate of Origin 1.1
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類