<?php/*頁面控制器模式:按我的理解就是將商務邏輯和視圖分離開來(通常最簡便的寫法是php和html代碼是混合在一個檔案裡面的),即一個商務邏輯檔案對應一個視圖檔案。 程式碼範例即註解如下:*///頁面控制器模式namespace woo\controller;//商務邏輯檔案 (檔案名稱AddVenue.php)abstract class PageController { //基類private $request;function __construct (){ $request = \woo\base\RequestRegistry::getRequest(); //通過註冊表類擷取一個處理使用者請求資訊的類if(is_null($request)){$request = new Request(); }$this->request = $request; } abstract function process(); function forward($resource){ //跳轉include($resource);exit(0); } function getRequest(){return $this->request; }}class AddVenueController extends PageController { //這個類的作用就是向資料庫寫入一個venue資料(資料表結構類似:id,name) function process(){try{$request = $this->getRequest();$name = $request->getProperty('venue_name'); //擷取使用者提交的venue的名稱if(is_null($request->getProperty('submitted'))){ //判斷是否表單提交,否的話跳轉到add_nenue.php$request->addFeedback("choose a name for the venue"); $this->forward('add_nenue.php'); } else if (is_null($name)){ //判斷表單提交是否有name $request->addFeedback("name is a required field"); $this->forward('add_venue.php'); //跳轉add_venue.php } $venue = new \woo\domain\Venue(null,$name); //建立對象便可將它添加到資料庫,具體內部的商務邏輯不必深究。$this->forward("ListVenues.php"); //添加成功後跳轉ListVenues.php,即一個列表資料的顯示介面 } catch(Exception $e){$this->forward('error.php'); //跳轉到一個錯誤介面 } }}$controller = new AddVenueController(); //執行這個類的process()方法$controller->process();?><?php //視圖檔案 (檔案名稱add_venue.php)require_once("woo/base/RequestRegistry.php");$request = \woo\base\RequestRegistry::getRequest();?><html><head><title>Add Venue</title></head><body> <h1>Add Venue</h1> <table> <tr> <td> <?php print $request->getFeedbackString('</td></tr><tr><td>')?> </td> </tr> </table> <form action="AddVenue.php" method="get"> <input type="hidden" name="submitted" value="yes" /> <input type="text" name="venue_name" /> </form></body></html>