第一步:入門
如何使用phpbean進行路由轉寄呢?下面是一個簡單的使用例子。
首先,index.php是程式的單一入門,主要進行路由轉寄的工作。Index.php的程式碼如下:
<?
include('startup.php');//載入開機檔案
try{
$router=new Phpbean_Router();//初始化路由器
$router->set_path(SITE_PATH.'/app/actions');//設定控制器的目錄
$router->dispatch();//路由轉寄處理
}catch (Exception $e){
echo $e;
}
?>
其中開機檔案如下:
<?
define('SITE_PATH',str_replace('\','/',dirname(__FILE__)));
set_include_path(get_include_path().PATH_SEPARATOR.SITE_PATH.'/libs/');
function __autoload($filename){
$filepath = SITE_PATH.'/libs/'.str_replace('_','/',$filename).'.php';
if(is_file($filepath)){
include($filepath);
}
}?>
然後,我們寫一個action測試一下。(關於為什麼選擇action而不是使用controller做為控制,可以看我之前的文章逐步提升架構的效能)
比如app/actions/indexAction.php,在裡面寫一個測試
<?
class indexAction extends Phpbean_Action {
function run(){
echo 'phpbean_index page!';
}
}?>
開啟IE輸入地址http://localhost:8080/phpbean/index.php/index看看結果。
第二步:擷取url參數
比如說我要使用url傳遞參數,如何在PHPbean中實現呢?phpbean中的pathinfo支援兩種擷取資料方式,一種是按照關鍵字,一種是按照順序(預設)。
以剛才的例子來說,在地址http://localhost:8080/phpbean/index.php/index後面加上參數http://localhost:8080/phpbean/index.php/index/1/2/3/4/
那麼,使用關鍵字來擷取url參數,使用$this->_getParam(‘1','key')。比如在indexAction的run方法中增加echo $this->_getParam(‘1','key')那麼就對應輸出2。注意,在phpbean中按關鍵字擷取url參數不要求匹配配對。比如說$this->_getParam(‘1','key') 返回2, $this->_getParam(‘2','key')就會返回3.
按照次序來擷取url參數應該更加方便。比如說$this->_getParam(1)就會返回1,$this->_getParam($n)就會返回第$n個參數。
第三步、Action多級目錄
一般來說,程式的設計都是module->controller->action的,比如說blog->user->login。那麼使用phpbean的action可以很方便進行映射。
首先,我們在app/actions下面增加blog檔案夾,再在app/actions/blog/下面增加user檔案夾。
現在我們來寫blog->user->login這個action。首先在app/actions/blog/user/下面建立loginAction.php。裡面寫入
<?
class blog_user_loginAction extends Phpbean_Action {
function run(){
echo 'blog_user_login';
}
}
?>
然後測試下http://localhost:8080/phpbean/index.php/blog/user/login/,是不是成功了呢?
那麼,“如何增加一些action的公用操作呢?比如admin目錄下面的所有action都要進行isadmin()檢查,如何?呢?”在phpbean中可以使用繼承很方便的來實現。下面以blog->admin為例來實現。
首先,增加一個admin目錄,在該目錄下增加一個action基類admin.php(注意,如果不是action,那麼檔案命名就不要使用***Action.php來命名)
<?
abstract class _blog_admin extends Phpbean_Action {
function __construct($params){
parent::__construct($params);
echo 'admin check!';
}
}
?>
然後,admin目錄下的所有的action都繼承與_blog_admin,而不是Phpbean_Action,這樣就實現了公用操作的封裝。比如說在admin目錄下建立一個loginAction.php
<?
class blog_admin_loginAction extends _blog_admin {
function run(){
echo 'blog_admin_login';
}
}
?>