我有以下路线:
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
应该访问BoardController @ getBoard(使用Route :: controller)
/boards/board/some-board-Alias/items
应该访问BoardItemController @ getIndex(使用Route :: controller) 也:
/boards/board/some-board-alias/items/item/123
应该访问BoardItemController @ getItem($ id)(使用Route :: controller)
答案 0 :(得分:1)
您可以像这样定义您的路线。订单很重要,因为Laravel将采用与URL模式匹配的第一条路线。
// If it's this specific route, go to `BoardItemController->getItem()`
Route::get('boards/board/{board_alias}/items', 'BoardItemController@getItem');
// 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