2009-12-08 86 views
1

我正在爲我自己製作的新的自定義MVC框架設置一個簡單的路由系統。簡單的PHP路由

目前我的路由器類視圖的URL爲這樣:

www.example.com/controller/controller_action/some/other/params 

所以,本質上......我一直保留的URI爲控制路由的前兩個部分。但是,如果我只想運行以下內容呢?

www.example.com/controller/some/other/params 

......它會試圖運行默認控制器操作並將額外的參數發送給它?

這裏是簡單的路由器我使用:

\* --- htaccess --- *\ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA] 

    \* --- index.php --- *\ 
    if (array_key_exists('rt',$_GET)) { 
     $path = $_GET['rt']; 
     $uri = explode('/',$this->path); 
     if(empty($uri[0])) { 
      $load->ctrl('home'); 
     } 
     elseif(empty($uri[1])) { 
      $load->ctrl($uri[0]); 
     } 
     else { 
      $load->ctrl($uri[0],$uri[1]); 
     } 
    } 
    else { 
     $load->ctrl('index'); 
    } 

    \* --- loader class --- *\ 
    public function ctrl($ctrl,$action=null) { 
     $ctrl_name = 'Ctrl_'.ucfirst(strtolower($ctrl)); 
     $ctrl_path = ABS_PATH . 'ctrl/' . strtolower($ctrl) . '.php'; 
     if(file_exists($ctrl_path)) { require_once $ctrl_path;} 

     $ctrl = new $ctrl_name(); 

     is_null($action) ? $action = "__default" : $action = strtolower($action); 
     $ctrl->$action(); 
    } 

我怎樣才能做到這一點?

+0

您正在使用哪個MVC框架? – Sampson 2009-12-08 05:12:38

+0

@Jonathan,在問題中提到,即時通訊使用自定義框架(爲了學習而學習)......因此,我可以選擇任何我想要的。我知道必須有一種簡單的方法來解決這個問題,我只是想念它...謝謝! – johnnietheblack 2009-12-08 05:14:00

回答

1

你可以在你的控制器中處理這個。通常,當請求的方法不可用時,MVC框架將調用默認方法。簡單地覆蓋此fallback-method來調用您所需的方法並將參數列表作爲參數傳遞。

例如,KohanaPHP有__call($method, $params)方法,當所請求的方法不存在時被調用。你可以處理這個內部的邏輯,或者你的MVC框架中的功能等價物。

這將讓你保持控制器本身的內部邏輯,而不是讓它在各種文件之間爆炸。

+0

我認爲我得到什麼oyu的意思...你的意思是,如果我有一個index()方法在我的控制器被調用沒有提供的方法,或沒有找到方法 - 銀行有調用該方法,因爲參數贏得' t匹配它,然後在該方法中將URI分開? – johnnietheblack 2009-12-08 05:16:32

+0

我的意思是你應該有一個missingMethod()方法,當請求一個不存在的方法時會被調用。在Kohana中,所請求的方法作爲第一個參數傳入,隨後提供的參數。只需將這些修補到你的index()方法,你應該全部設置好。 – Sampson 2009-12-08 05:18:20

+0

你在我提交我的評論之前就編輯過了......並且你回答了我的問題,我想......人力資源管理,即時通訊就可以了,但是我可以通過深入研究這個框架來恢復,現在不難做到: )它可能是一個好主意哈哈 – johnnietheblack 2009-12-08 05:18:56