2010-01-19 64 views
9

bootstrap.php,你設置路線,我很難讓他們工作。我前一段時間閱讀了一些文檔,似乎無法再找到解釋它們的說明。這裏是我的例子有人可以解釋Kohana 3的路由系統嗎?

Route::set('products', 'products/(type)', array('type' => '.+')) 
    ->defaults(array(
    'controller' => 'articles', 
    'action' => 'view_product', 
    'page' => 'shock-absorbers', 
    )); 

以爲這將意味着像products/something的請求將加載了articles控制器和action_view_product()方法之一。但我無法讓它工作。

有人可以請他解釋他們是如何工作的,以及所有的方法參數是什麼?

回答

5

我認爲這將意味着一個請求 同類產品/東西會加載 文章控制器,以及 action_view_product控制器。但我 無法讓它工作。

你弄錯了粗體部分。這實際上將加載action_view_product 方法的文章控制器的

class Controller_Articles extends Controller { 
    public function action_view_product() { 
     $params = $this->request->param(); 
     // if the uri is `products/something' then $params['type'] == 'something' 
    } 
} 

編輯:

噢,我的上帝啊你的上帝,爲什麼沒有通知我!

實際問題在於您的路線模式!它應該是products/(<type>),帶尖括號。那些會提示Kohana你希望'type'是一個參數名稱,而不是文字。

+0

對不起,這是一個錯字!我似乎仍然無法爲我工作。 – alex 2010-01-19 03:07:58

+0

你把你的控制器的php文件放在正確的文件夾中嗎? – Lukman 2010-01-19 03:10:42

+0

是的,我有一個默認路由捕獲所有(並在正常工作) – alex 2010-01-19 03:12:43

3

UFF,對不起,然後降低並大於跡象並不表明正確

'products/(type)' should be 'products/(<type>)' 
+0

甚至更​​好:''product(/ )'',否則'產品'(沒有斜槓)不會匹配(儘管您可能需要這樣做) – giorgio 2012-01-28 13:24:03

3

括號表示可選部分(如果他們缺少的正則表達式匹配)。這些可以是靜態的和/或包含命名變量。尖括號指示的路線命名變量,它是通過控制器訪問:

$this->request->param('type'); 

我寫的官方路由指南,你可以閱讀here,它應該回答你所有的問題。

0

根據記錄:

的目錄,控制器和動作可以從請求作爲公共屬性,像這樣進行訪問:

// From within a controller: 
$this->request->action; 
$this->request->controller; 
$this->request->directory; 

// Can be used anywhere: 
Request::instance()->action; 
Request::instance()->controller; 
Request::instance()->directory; 

源:http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters

相關問題