2011-03-16 142 views
0

我有一個用戶控制器的路由。該控制器具有大約20的方法,所以我不想手動設置他們的路線:KohanaPHP 3路由問題

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

我也用來管理用戶的圖片多種方法畫面控制器(Controller_User_Pictures)。當我創建路線時:

Route::set('pictures', 'user/pictures/<action>') 
     ->defaults(array(
      'directory' => 'user', 
      'controller' => 'user_pictures', 
      'action'  => 'index', 
     )); 

這不起作用。

即使我創建一個單獨的控制器(Controller_Pictures),並創建航線它不工作:

Route::set('pictures', 'user/pictures/<action>') 
     ->defaults(array(
      'directory' => 'user', 
      'controller' => 'pictures', 
      'action'  => 'index', 
     )); 

在所有的情況下,它會返回錯誤:Method action_pictures does not exist這意味着路由器正在尋找在用戶控制器的動作稱爲圖片這當然是錯誤的。

我在想的唯一解決方案是在bootstrap.php文件中定義所有路由。你有更好的解決方案嗎?

編輯 第二個問題,是否有任何想法如何在任何行動(當然在路由)中用連字符替換下劃線?

回答

1

路線的順序很重要;具體的路線應該先到達。

因此,您的網址user/pictures/<action>正在觸發第一條路線。如果你把圖片路由放在普通用戶路由之上,它應該可以正常工作。

另一個側面說明:如果你指定的目錄「用戶」,您的控制器將在Controller_User_Picturesclasses/controller/user/pictures.php

+0

是的,你說得對。這就是我認爲的但是有一個小錯誤讓我思考錯誤。如果我沒有提供URL中的任何操作(只有用戶/圖片),它不起作用(顯示我的問題的錯誤),如果我提供索引或任何其他行動它的工作。你有什麼想法爲什麼? – Matti 2011-03-16 11:22:48

+0

另外,擴展我的問題,如果你可以看看,它會很高興。 – Matti 2011-03-16 11:26:01

+0

URL'user/pictures'將不起作用,因爲路由中的操作不是可選的。在路線上需要稍微改變:''用戶/圖片(/ )''這樣路線中的動作部分(以及它的/ infront)是可選的。至於你的下劃線/連字符的東西;我不確定。我沒有看到一個合適的解決方案,也沒有自己遇到過。下劃線轉換爲Kohana中的目錄分隔符。所以最好不要(ab)使用那些。 – SpadXIII 2011-03-18 08:20:12