CodeIgniter 的基本架構

先來介紹一下 CodeIgniter 的基本架構好了, 所以先來說明一下 CI 的頁面是怎麼做的。由於使用 MVC 架構, 所以最主要的就是 Controller, 程式透過 Controller 來呼叫 Model 存取資料庫, 然後在指定 View 輸出, 這樣一來, Controller 就可以變得很簡單。 以製作 Blog 為例, Blog 的首頁通常都會顯示最新的 10 篇文章, 就以這個簡單的範例來說明。不過在這裡先只討論 Controller 部份。

基本上, 每個 Controller 都是一個 Class, 在每個 Class 裡面的 function 都是一個頁面, 嗯, 這個概念很重要! 先來看看下面這一段, 應該就會比較清楚。

<?  
class Blog extends Controller{  
    function index(){
        $this->load->model('blog_model');
        $data = $this->blog_model->get_lastest_entries();

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

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

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

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

http://tzangms.com/post/26  

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

這裡是第 26 篇文章

看到這邊大概就知道 CI 的 Controller 是怎麼運作的吧? 好, 接著再來看看 index 這個 function, 存取 index 頁面的網址如下

http://tzangms.com/index  

或更簡短

http://tzangms.com/blog  

只要輸入上面這個網址就會顯示出 index 這個 function 所產生的頁面, 也就是顯示最新的 10 篇 blog 文章。另外, 由於 index 是 CI 預設的首頁, 所以存取這個頁面的網址可以比 post 更簡短, 不過這個 index function 未免也太簡潔了吧!? 沒錯, 使用 CI 就是那麼簡潔 :D

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

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

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

$data = $this->blog_model->get_lastest_entries();

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

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

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

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!