程式|開發指南
與許多開發架構一樣,FleaPHP 通常也使用一個入口檔案來啟動架構,並運行應用程式代碼。雖然 FleaPHP 並不要求應用程式必須使用單一的入口檔案,不過在本系列文章中,我大部分時間都使用單一入口檔案。
單一入口應用程式
在 FleaPHP 應用程式使用 MVC 模式時,應用程式的所有功能都通過一個單一的檔案來調用。這種通過單一檔案來執行所有功能的應用程式,稱為單一入口應用程式。有關單一入口應用程式的一些資訊,可以參考 ChinaUnix 上的一篇文章。
許多著名的 PHP 應用程式都是單一入口,例如 Drupal、WordPress、XOOPS、Mambo 等。當然也有 phpMyAdmin 這樣的非單一入口應用程式。
建立入口檔案
現在,我們來建立一個最簡單的入口檔案。開啟文字編輯器,建立 htdocs\index.php 檔案,內容如下:
<?phprequire('FLEA/FLEA.php');run();?>
現在啟動瀏覽器,輸入地址:http://localhost/index.php,應該就可以看到如下的畫面:
這個畫面顯示了一個錯誤資訊,但是也表明 index.php 中的兩行代碼已經成功啟動了 FleaPHP 架構。
實現我們的第一個控制器
在 FleaPHP 應用程式中,應用程式套件組合含多個控制器。每一個控制器又提供一組控制器動作(後文及本系列文章中都簡稱為“動作”)。每一個瀏覽器發送給 FleaPHP 應用程式的請求,都是由一個動作來處理的。將一組相關的動作集中到一起,就形成了一個控制器。
現在我們來實現第一個控制器:
建立 htdocs\APP\Controller 目錄,並建立檔案 htdocs\APP\Controller\Default.php (注意嚴格匹配目錄名和檔案名稱的大小寫),內容如下:
<?phpclass Controller_Default{ function actionIndex() { echo "My first controller."; }}?>
同時修改 index.php 入口檔案,內容改為:
<?phprequire('FLEA/FLEA.php');import(dirname(__FILE__) . '/APP');run();?>
現在切換到瀏覽器,點擊[重新整理] 按鈕,可以看到 Default.php 檔案中的 actionIndex 方法正確執行了。
從剛剛這個例子可以看到,每一個控制器實際上就是一個類,而一個動作則是該類的一個方法。
添加更多的動作
現在我們為這個控制器添加更多的 Action 方法:
<?phpclass Controller_Default{ function actionIndex() { echo "My first controller."; } function actionSay() { echo "Oh, FleaPHP great!"; }}?>
切換到瀏覽器,將瀏覽地址從 http://localhost/index.php 改為 http://localhost/index.php?action=say 並按斷行符號鍵。可以看到輸出內容改變了。
由此可見,action 參數的值決定了要調用控制器中的哪一個動作方法。在上面的例子中,action=say 時,調用的動作方法為 actionSay。因為 FleaPHP 預設要求每一個動作方法必須加上首碼 action。如果不提供 action 參數,則名為 index 的動作方法 actionIndex() 會被調用。
實現更多的控制器
建立新檔案 htdocs\APP\Controller\Book.php,並輸入內容:
<?phpclass Controller_Book{ function actionIndex() { echo "Book controller default action."; } function actionSayTitle() { echo h("<< Boost up with FleaPHP >>"); }}?>
現在切換到瀏覽器,輸入地址 http://localhost/index.php?controller=Book&action=sayTitle,並按斷行符號鍵。可以看到我們成功的調用了另一個控制器的動作方法。
與使用 action 參數指定要調用的動作類似,用 controller 參數可以指定要調用的控制器。而此時 action 參數指定的就是該控制器的動作。