2011-04-10 100 views
0

我如何通過在URL額外的參數,以KohanaPHP(3.1+版)是這樣的...如何擴展KohanaPHP中的URL參數?

http://example.com/blog/edit/4000/3200 

...其中,「博客」是在控制器文件夾中的blog.php的,「編輯」是一個控制器方法,4000是參數1,我可以使用誰來編輯記錄,而3200是參數2,我可以用它來記錄ID?

我得到的博客和編輯部分。問題是4000和3200.當我運行該URL時,出現錯誤:「404 - 無法找到路由匹配博客/編輯/ 4000/3200」

我是不是不得不做一些不尋常的事情.htaccess文件,或在問號後傳遞參數作爲查詢參數?

+0

'.htaccess'引用。 PHP無法攔截請求,因此您需要Apache(或其他網絡服務器)來幫助將它們指向適當的PHP文件。 – Blender 2011-04-10 00:17:35

+0

@Blender。你知道KohanaPHP MVC框架嗎?它已經使用了一個.htaccess文件,它將所有流量引導到index.php進行處理。所以這個問題是一個Kohana框架問題,而不是一個普通的PHP問題。 – Volomike 2011-04-10 00:28:31

+0

我很難搞清楚你的​​問題。你能否使它更加明確一些,就像它現在的狀態一樣,它很模糊。 – Blender 2011-04-10 00:33:13

回答

2

這說明要做什麼:

http://kohanaframework.org/3.1/guide/kohana/routing

但從本質上講,我需要編輯應用程序\的bootstrap.php文件,並更改此:

Route::set('default', '(<controller>(/<action>(/<id>)))') 
    ->defaults(array(
     'controller' => 'welcome', 
     'action'  => 'index' 
    )); 

這樣:

Route::set('default', '(<controller>(/<action>(/<param1>)(/<param2>)))') 
    ->defaults(array(
     'controller' => 'welcome', 
     'action'  => 'index' 
    )); 

現在在我的blog.php控制器文件中,我現在可以通過2段米的 「action_edit」 類方法,像這樣:

public function action_edit() { 
    $sParam1 = $this->request->param('param1'); 
    $sParam2 = $this->request->param('param2'); 
    $this->response->body('param1=' . $sParam1 . ' param2=' . $sParam2); 
} 
+0

請不要在控制器的方法中使用arg列表。它將在v3.2中被棄用。改爲使用'$ this-> request-> param('param1')'。另一件事是在正則表達式。如果你的param1和param2是整數,將它們定義爲整數:'Route :: set('defaults','...',array('param1'=>'\ d +','param2'=>'\ d +')) ;'。另外,爲什麼你想通過URI傳遞用戶ID?通常你可以從會話中獲得用戶數據(或類似於'Auth :: instance() - > get_user()')? – biakaveron 2011-04-10 18:09:06

+0

並從'defaults()'調用中移除param1和param2。 '$ this-> request-> param()'爲空段返回NULL。 – biakaveron 2011-04-10 18:12:54

+0

@blakaveron「爲什麼通過URL使用用戶ID?」這是一個假想的,但可悲的例子,我可以在腦海中想出當時的情況。請忽略它。重點在於傳遞URL參數。 – Volomike 2011-04-11 03:55:39

0

你需要在你的bootstrap.php這樣的路線:

Route::set('blog_edit', 'blog/edit/<param1>(/<param2>)') 
     array(
      'param1' => '[[:digit:]]{1,}', 
      'param2' => '[[:digit:]]{1,}', 
     )) 
    ->defaults(array(
     'controller' => 'blog', 
     'action'  => 'edit', 
    )); 

注:的 「()」 讓param2可選。

在你的控制器,你可以訪問參數的方法參數通過Request對象

class Controller_Blog 
{ 
    public function action_edit($param1, $param2) 
    { 
     // or 
     $param1 = $this->request->param('param1'); 
     $param2 = $this->request->param('param2'); 
     // [...] 
    } 
} 

我沒有測試代碼,但它應該是非常接近你所需要的。

從 「Kohana PHP 3.0 (KO3) Tutorial Part 6