用 PHP5 打造簡易的 MVC 架構

The View

就像模型一樣有幾個不同的方式來處理我們MVC系統的視圖部份,我們會用Router自動載入另一個叫做’view_{name}.php’的檔案,但是為了讓教學可以簡單一點,我們會新增一個Template 類別,這個可以用來顯示樣板。
首先在’classes’ 目錄中新增一個’template.php’,然後將下面的程式碼加入:

<?phpClass Template {

private $registry;

private $vars = array();

function __construct($registry) {

$this->registry = $registry;

}

}

?>

正如你所見,我們已經取得了Template的基本架構,下一個步驟就是新增下面的程式碼到index.php檔中,在Router敘述前:

# Load template object$template = new Template($registry);

$registry->set (‘template’, $template);

因為我們想要在我們的樣板中使用來自模型及控制器的資料,我們必須在樣板中寫一個set()方法來使用變數,看一下下面的例子:

function set($varname, $value, $overwrite=false) {if (isset($this->vars[$varname]) == true AND $overwrite == false) {
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()方法的程式片段:

function show($name) {$path = site_path . ‘templates’ . DIRSEP . $name . ‘.php’;

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’ 檔案,然後放入下面的程式碼:

Hello from the View, <?php echo $first_name; ?>!

然後在控制器(在controllers/index.php下):

function index() {$this->registry[‘template’]->set (‘first_name’, ‘Dennis’);
$this->registry[‘template’]->show(‘index’);

}

假如你現在瀏覽我們的MVC系統,你會得到下面的樣子:

(完整版)

現在我們已經得到作用的視圖構件,我們的MVC系統已經完成,並且可以用來建立一個完善的網站,但是還有一些小事需要注意。

安全考量

這個時候所有的子目錄,像是’controllers’ 及 ‘templates’,任何來拜訪的人都可以有權限使用,這個意味使用者可以執行只可以在我們系統上執行的控制器或樣板,所以讓我們拒絕這些目錄被存取。

用 .htaccess這個檔案是相當容易的,而且只要下面一行就可以:

Deny from ALL

將上面這一行加入新的.htaccess檔中,將它存在’controllers’ 及 ‘templates’ 目錄中(以及任何你想保護的目錄),這可以確認這些目錄完全不讓任何人存取。

Conclusion

在這篇教學中我已經告訴你如何用PHP5建構MVC系統,很明顯的還有很多不同的方法可以建構MVC系統,而且我們在這裡所建構的MVC系統也不是最好的,但是它可以證明MVC系統所帶來的威力。

你可以按這裡下載這篇教學中所用到的完整MVC系統程式.

假如你有任何的問題或意見,可以按回應或引用留言。

呼!終於翻完這一篇了!

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

頁次: 1 2 3 4 5

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *