[CodeIgniter]第一個靜態頁面

CodeIgniter官方有範例來讓第一次接觸的人比較好上手

這是我選擇先學CodeIgniter的原因不然我其實是想直接學Laravel的


我得說這個範例真的寫得很好
也沒什麼好多說的,直接用網址當範例說明
http://example.com/[controller-class]/[controller-method]/[arguments]

主網域後接的是class名稱,然後是使用的function,最後是要傳入controller的變數

首先新建一隻檔案叫
application/controllers/Pages.php
<?php
class Pages extends CI_Controller {

public function view($page = 'home')
{
}
}

這個步驟創建了一個繼承CI_Controller的類別類別,名為 pages。
並且有一個view方法,接受一個參數名為 $page。
代表這個新的 pages 類別可以存取在 CI_Controller 類別(system/core/Controller.php)中定義的方法以及變數。

第二步是建立兩個模板(View)來作為header和footer
在application/views/templates/建立 header.php,程式碼如下


CodeIgniter Tutorial





application/views/templates/建立 footer.php 檔案,內容如下

                © 2015

接下來在application/views/pages下新增兩個檔案
home.php跟about.php,內容隨便打,老套一點就用Hello World!
接下來是增加controller的邏輯
在讀取頁面前要確定要求的頁面存在,所以回到application/controllers/Pages.php
在function 裡面輸入以下程式碼


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);
}

使用PHP的原生函式 file_exists() 用來檢查檔案是否在預期的地方

當頁面存在時,它將會被讀取然後顯示給使用者,包含了 header 與 footer

如果頁面不存在,將會顯示錯誤訊息”404 Page not found”
在 header 模板裡, $title 變數用來客製頁面的標題。

在view方法中我們給標題設定了值,但我們不是將值設定給變數,

而是設定給 $data 陣列裡面的 title 元素。

最後要做的事情是按照順序來讀取檢視。

在 view() 方法中的第二個參數是用來傳值給檢視用的。

$data 陣列中的每個值會依照其陣列索引鍵值來存放到同名的變數中。

所以在控制器中 $data[‘title’] 的值等同於檢視中的 $title 。


現在controller可以運作了

訪問[你的網址]index.php/pages/view可以看到剛剛的網頁

若是訪問index.php/pages/view/about 會看到about頁面,且都包含了header與footer

為了精簡我們的URL網址,我們會設定application/config/routes.php 的路由檔案

將預設的內容刪除並加上


$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

CodeIgniter 由上而下讀取這個路由規則,並且將請求導向第一個符合的規則。

每一個規則都是正則表達式(位於左側)

對應到由反斜線分隔的控制器與方法(位於右側)

當一個請求進來,CodeIgniter 找出第一個符合的規則

然後呼叫其控制器與方法,可能還包含了參數。


在這邊, $routes 陣列中的第二條規則使用了萬用字串 (:any),它將會符合任何的請求。
並將參數傳送給 pages 類別中的 view() 方法。

現在,訪問 index.php/about

就會被正確的導到 pages 控制器中的 view() 方法呢!太神奇了!


以上就是第一個靜態頁面

留言