2013年1月16日 星期三

Ci 基本框架內容


CodeIgniter 的基本架構上次剛說過, 現在說明一下 CI 的頁面是怎麼做的。
由於使用 MVC 架構, 所以最主要的就是透過 Controller 來呼叫 Model 存取資料庫
然後在指定 View 輸出, 這樣一來, Controller 就可以變得很簡單。
以文章為例, 網站一定都會有文章列表或者新聞列表,每一頁暫定顯示十篇
就以這個簡單的範例來說明。不過在這裡先只討論 Controller 部份。
基本上, 每個 Controller 都是一個 Class, 在每個 Class 裡面的 function 都是一個頁面
嗯, 這個概念很重要! 先來看看下面這一段, 應該就會比較清楚。

<?php
class News extends Controller{
    function index(){
        $this->load->model('news_model');
        $data = $this->news_model->getListNews();

        $this->load->view('news', $data);
    }

    function post($id){
        echo "這裡是第 $id 篇文章";
    }
}
?>


在上面這段程式碼, 可以看到是一個叫做 News 的 Class, 裡面包含了 index 以及 post 兩個 function。
先來說明比較簡單的 post 好了, 在先前有提到, 在 Class 中的 function 其實就是一個頁面,
不像以往, 一個 php 檔案就是一個頁面。

接著來看看要如何存取 post 這個頁面, 首先看到下面這個網址

    http://domain/news/post/26

這個網址在 domain 後面的部份, 一開始接的是 「news」, 沒錯, 指的就是剛才上面寫的 News Class,
接著是 「post」 就是在 Class 中看到的 post function,
再後面的 「26 」就是要傳給 post function 的 $id 變數, 也就是第 26 篇文章,
所以只要輸入上面的網址, 就可以執行 News class 中的 post function,
而輸出的結果就跟程式中看到的一樣, 會直接輸出一行文字, 如下:

    「這裡是第 26 篇文章」

看到這邊大概就知道 CI 的 Controller 是怎麼運作的吧? 好, 接著再來看看 index 這個 function, 存取 index 頁面的網址如下
http://domain/news/index
或更簡短
http://domain/news
只要輸入上面這個網址就會顯示出 index 這個 function 所產生的頁面, 也就是顯示最新的 10 篇 news 文章。
另外, 由於 index 是 CI 預設的首頁, 所以存取這個頁面的網址可以比 post 更簡短,
不過這個 index function 未免也太簡潔了吧!? 沒錯, 使用 CI 就是那麼簡潔

接下來來說明一下 index 裡的程式碼, 可以看到 index function 裡總共只有 3 行, 先來看看第一行:

$this->load->model('news_model');

在這裡大家先知道, 這裡是在載入一個叫做 news_model 的 Model,
而 Model 主要的工作就是在存取資料庫。接下來第二行如下:

$data = $this->news_model->getListNews();

在這裡就先想像一下 news_model 中, 已經寫好一個叫做 getListNews 的 function,
會取出最新的 10 篇文章然後 return。
而在上面可以看到, 最後會將取出的資料傳給 $data 這個變數,
接著在最後一行, 將 $data 一起輸出給 View, 這樣一來就完成了 News 首頁啦!!
當然 View 的部份也就不先說明了。
不過還是列一下如和載入要顯示的 View, 並先前透過 getListNews 所取出的資料一起透過 View 輸出。

$this->load->view('news', $data);

基本上 Controller 就是長得這樣, 在一個 Controller (Class) 中包含許多頁面(function),
這麼一來, 把相關的頁面寫在同一支 Controller 中, 是不是比較好維護呢?
另外使用 MVC 架構, Controller 看起來也會簡潔許多。
Share:

0 意見: