Laravel - 在子路由上路由子控制器

时间:2013-11-28 11:05:12

标签: php laravel laravel-routing

我有以下路线:

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)

1 个答案:

答案 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