0

我有以下路线:

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)

4

1 回答 1

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
于 2013-11-28T11:22:35.087 回答