【问题标题】:Laravel - routing a child controller on child routeLaravel - 在子路由上路由子控制器
【发布时间】:2013-12-14 09:20:48
【问题描述】:

我有以下路线:

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)

【问题讨论】:

  • 如果您映射呼叫将非常容易。没有它,代码将永远是非常肮脏和不可靠的。 (如果您将来更改某些内容,可能会很头疼)。
  • 映射调用是什么意思?

标签: php laravel laravel-routing


【解决方案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

【讨论】:

  • 感谢旁注,记住这一点。您提到的大小路线适用于资源路线。如果你愿意,可以说 /board/bonzo 它将在 BoardController 中执行 getBonzo() 函数 - 这是我想要的行为。
  • @VladKucherov 现已修复 :)
  • 嗯,这是一个可行的想法,但就像在 BoardController 中一样,BoardItemController 也应该作为控制器工作。我不想映射 BoardItemController 中的所有可用函数。 board/board/{board_alias}/items 应该执行 getIndex() 和 board/board/{board_alias}/items/item/123 应该执行 getItem($id) 等等......
  • 好吧,恐怕你应该重新考虑一下你的网址。
  • 很伤心,你确定这是不可能的吗?
猜你喜欢
  • 2013-09-21
  • 2014-07-08
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多