The View
就像模型一樣有幾個不同的方式來處理我們MVC系統的視圖部份,我們會用Router自動載入另一個叫做’view_{name}.php’的檔案,但是為了讓教學可以簡單一點,我們會新增一個Template 類別,這個可以用來顯示樣板。
首先在’classes’ 目錄中新增一個’template.php’,然後將下面的程式碼加入:
private $registry;
private $vars = array();
function __construct($registry) {
$this->registry = $registry;
}
}
?>
正如你所見,我們已經取得了Template的基本架構,下一個步驟就是新增下面的程式碼到index.php檔中,在Router敘述前:
$registry->set (‘template’, $template);
因為我們想要在我們的樣板中使用來自模型及控制器的資料,我們必須在樣板中寫一個set()方法來使用變數,看一下下面的例子:
trigger_error (‘Unable to set var `’ . $varname . ‘`. Already set, and overwrite not allowed.’, E_USER_NOTICE);
return false;
}
$this->vars[$varname] = $value;
return true;
}
function remove($varname) {
unset($this->vars[$varname]);
return true;
}
正如你所見,set()及remove() 方式是相當簡單的方法,用來設定及移除變數。
現在我們可以設定變數,我們所需要寫的就是show()方法,用來顯示樣板,最簡單的方法就是新增一個templates’目錄,用來容納我們所有的樣板檔,然後呼叫include()來顯示一個樣板,當然你的show()可能完全不同,可能從資料庫載入樣板或是其他的動作,看一下我們使用的show()方法的程式片段:
if (file_exists($path) == false) {
trigger_error (‘Template `’ . $name . ‘` does not exist.’, E_USER_NOTICE);
return false;
}
// Load variables
foreach ($this->vars as $key => $value) {
$$key = $value;
}
include ($path);
}
我們的Template類別現在已經完成,並且可以用來在控制器中顯示樣板,舉個例,在templates’ 目錄中新增’index.php’ 檔案,然後放入下面的程式碼:
然後在控制器(在controllers/index.php下):
$this->registry[‘template’]->show(‘index’);
}
假如你現在瀏覽我們的MVC系統,你會得到下面的樣子:
(完整版)
現在我們已經得到作用的視圖構件,我們的MVC系統已經完成,並且可以用來建立一個完善的網站,但是還有一些小事需要注意。
安全考量
這個時候所有的子目錄,像是’controllers’ 及 ‘templates’,任何來拜訪的人都可以有權限使用,這個意味使用者可以執行只可以在我們系統上執行的控制器或樣板,所以讓我們拒絕這些目錄被存取。
用 .htaccess這個檔案是相當容易的,而且只要下面一行就可以:
將上面這一行加入新的.htaccess檔中,將它存在’controllers’ 及 ‘templates’ 目錄中(以及任何你想保護的目錄),這可以確認這些目錄完全不讓任何人存取。
Conclusion
在這篇教學中我已經告訴你如何用PHP5建構MVC系統,很明顯的還有很多不同的方法可以建構MVC系統,而且我們在這裡所建構的MVC系統也不是最好的,但是它可以證明MVC系統所帶來的威力。
假如你有任何的問題或意見,可以按回應或引用留言。
呼!終於翻完這一篇了!