教程 ? 加載靜態(tài)內容
注意: 本教程假定你已經下載和安裝了CodeIgniter開發(fā)環(huán)境。
首先,你需要創(chuàng)建一個可以處理靜態(tài)內容請求的控制器類??刂破?,是一個用來代理完成某項任務的PHP類,它充當基于MVC架構應用程序的“粘合劑”(譯者注:控制器用來粘合/協(xié)調不同模型和視圖。隨著教程的深入,你會更深刻的理解這一點)。
舉例來說,假設存在某個針對如下URL的請求: http://example.com/news/latest/10
仔細觀察此URL地址,我們可以猜測它所完成的任務:存在某個類名為"news"的控制器,調用此類下的"latest"方法用來提取10條最新新聞,然后解析顯示在最終瀏覽器頁面上。在基于MVC架構思想的應用程序中,我們經常會見到如下典型URL格式:
http://example.com/[控制器類名]/[控制器方法名]/[所需參數(shù)]
在實際項目中,以上典型格式可能會存在變化趨于復雜。但到目前為止,了解這一典型格式已然足夠。
創(chuàng)建一個控制器文件application/controllers/pages.php,并編寫如下代碼:
你已經創(chuàng)建了一個名為"pages"的類, 包涵一個視圖的方法,并定義了一個名為 $page 的參數(shù)。 這個pages類繼承了CI_Controller類。這就意味著 這個新的pages類可以繼承CI_Controller (system/core/Controller.php) 類里面定義的方法和變量。
這個控制器會成為你的網站程序每次請求的中心。 在非常技術性的CodeIgniter的討論中,我們把它稱為 超級對象。就像任何php類一樣,在你自己的控制器中,使用$this來調用它,這樣就可以實現(xiàn)用 $this 來加載所有變量、視圖和對這個框架進行一般操作。
現(xiàn)在你已經創(chuàng)建了自己的第一個方法,是時候來做幾個基礎的頁面模板了。我們將要創(chuàng)建兩個 "視圖" (模板頁面) ,也就是頁面的頁頭(header)和頁腳(footer)。
創(chuàng)建頁頭文件 application/views/templates/header.php ,代碼如下。
頁頭文件包括在正式加載視圖前需要的基本的HTML代碼。同時,這里還輸出了 $title 函數(shù),一會兒我們會在控制器中對它進行定義?,F(xiàn)在我們來創(chuàng)建一個頁腳 application/views/templates/footer.php ,代碼如下:
為控制器添加邏輯結構 (Adding logic to the controller)
之前你創(chuàng)建了一個控制器并定義了一個方法view()。這個方法里定義了一個參數(shù),它的值是即將加載的頁面的名稱。靜態(tài)頁面的模板將被放在 application/views/pages/ 文件夾中。
在那個文件夾中需要創(chuàng)建兩個文件,分別為 home.php 和 about.php。在這兩個文件中敲一些任何你喜歡的內容進去并保存。如果你喜歡特別不尋常的內容,可以試試敲“Hello World!”。
為了能加載那些頁面,你需要檢查一下它們是否存在:
public function view($page = 'home') { if ( ! file_exists('application/views/pages/'.$page.'.php')) { // 頁面不存在 show_404(); } $data['title'] = ucfirst($page); // 將title中的第一個字符大寫 $this->load->view('templates/header', $data); $this->load->view('pages/'.$page, $data); $this->load->view('templates/footer', $data); }
此時,如果頁面存在,它將被加載,同時,頁頭和頁腳也會顯示出來。如果頁面不存在,那么就會顯示404錯誤頁面。
這個方法中的第一行是檢查文件是否存在的,使用的是PHP自帶的函數(shù) file_exists() 。show_404() 是CodeIgniter中的函數(shù),用來調用404錯誤頁面。
在頁頭模板(header.php)中,我們用 $title 變量來自定義頁面標題(<title>)。而這個變量的值,我們現(xiàn)在在這個方法中對它進行了定義。不過,我們并沒有將這個值直接賦給變量,而是將它作為一個元素賦給了 $data 數(shù)組。
最后一項,按照需要顯示的順序來加載那些視圖。 view() 方法中的第二個參數(shù)是用來傳遞值給視圖的。數(shù)組中的每個值都被定義成與它關鍵字相同的一個變量,如控制器中 $data['title'] 的值就等同于視圖中變量$title。
設置路由(Routing)
這個控制器現(xiàn)在可以工作了,在瀏覽器中鍵入后面的地址 [你的網址]index.php/pages/view 就可以看到。輸入 index.php/pages/view/about 也可以看到about頁面,也是帶頁頭和頁腳的哦。
根據自定義路由的規(guī)則,你也可以自己定義任何控制器和方法的URI,這樣就可以擺脫下面的既定規(guī)則了。
http://example.com/[controller-class]/[controller-method]/[arguments]
我們來試試吧。打開路由文件 application/config/routes.php ,并添加下面兩行代碼,并刪除 $route 數(shù)組中的其他代碼。
$route['default_controller'] = 'pages/view'; $route['(:any)'] = 'pages/view/$1';
在CodeIgniter里,路由規(guī)則是按照從上到下的順序讀取的,而其中設定路由的請求是第一個被讀到的。沒有規(guī)則從左到右都是 控制器名斜線(/)方法名 的組合。請求出現(xiàn)的時候,CodeIgniter就開始最合適的內容進行匹配,調用適當?shù)目刂破骱头椒?,也可能調用參數(shù)。
更多關于路由設置的信息都在 URI 路由 文檔 里。
回到上面的代碼,第二行是指利用通配符 (:any) 可以使任何請求都能匹配到 $routes 數(shù)組,并且通過參數(shù)傳遞給pages類的view()方法。
現(xiàn)在,訪問下 index.php/about. 看看是不是已經能正確地顯示頁面了呢?贊!
?