2013-11-28 100 views
0

我有以下途徑:Laravel - 路由孩子航線對孩子控制器

Route::controller('/boards', 'BoardController'); 

這是爲了響應以下途徑:

/boards -> function: getIndex() 
/boards/board/Some-board-Alias -> function: getBoard() 

我想要做的是 - 當我進入以下路線:

/boards/board/Some-board-Alias/items 

將執行 「BoardItemController」 功能:getItem()時

我試圖做這樣的事情:

Route::controller('/boards/board/{board_alias}/items', 'BoardItemController'); 

但是,當我輸入以下路線:

/boards/board/Some-board-Alias/items 

則顯示與內容:

/boards/board/Some-board-Alias 

看起來它對待「項目「作爲參數,而不是路線的一部分。 有沒有一種方法使用另一個控制器的子路線?


只是爲了說清楚路線:

/boards/board/Some-board-Alias 

(使用路線::控制器)

/boards/board/some-board-Alias/items 

應(使用路由訪問BoardItemController @ getIndex應該訪問BoardController @ getBoard: :控制器) 還有:

/boards/board/some-board-alias/items/item/123 

應該訪問BoardItemController @ getItem($ id)(使用Route :: controller)

+0

這將是,如果你很容易映射電話。沒有它,代碼將永遠是非常骯髒和不可靠的。 (如果你將來改變某些東西,這可能會讓人頭疼)。 – itachi

+0

你是什麼意思映射電話? –

回答

1

您可以像這樣定義您的路由。順序很重要,因爲Laravel會採用匹配URL模式的第一條路線。

// If it's this specific route, go to `BoardItemController->getItem()` 
Route::get('boards/board/{board_alias}/items', '[email protected]'); 
// If not, try to find another one in the rest of the file 
Route::controller('boards', 'BoardController'); 

然後,在你的控制器:

// BoardItemController.php 
public function getItem($alias) 
{ 
    // do awesome stuff 
} 

作爲一個側面說明,不定義你的路由時所使用的斜線:

Route::controller('boards'); // right 
Route::controller('/boards'); // wrong 
+0

感謝您的注意事項,牢記這一點。 你提到的大小路由適用於資源路由。如果你願意說/ board/bonzo它會在BoardController中執行getBonzo()函數 - 這是我想要的行爲。 –

+0

哎呀,你是對的!相應地編輯答案。 –

+0

@VladKucherov現在修復:) –