Laravel:54使用一条路线进行相同的路线

时间:2017-04-19 12:00:58

标签: php laravel routes

我想要两个只使用两个路线和获取(mp3,视频,专辑艺术家)。

这是我的尝试:(在一个组" /")

Route::get("mp3s", "PostController@archivePt");
  Route::get("mp3s/mp3/{slug}", "PostController@singlePost");

  Route::get("videos", "PostController@archivePt");
  Route::get("videos/video/{slug}", "PostController@singlePost");

  Route::get("albums", "PostController@archivePt");
  Route::get("albums/album/{slug}", "PostController@singlePost");

  Route::get("artists", "PostController@archivePt");
  Route::get("artists/artist/{slug}", "PostController@singlePost");
  

我写了一个foreach,但是:

     
      
  1. 我认为在每个页面都是不好的做法。

  2.   
  3. 我不能在这里得到(mp3或专辑,..):

  4.   
  foreach (pts as  $pt) {
    Route::get( $pt.'s', 'PostController@archivePt');
    Route::get( ("{$pt}s/$pt/{slug}"), "PostController@singlePost");
  }

2 个答案:

答案 0 :(得分:1)

当你使用相同的控制器 - 被认为是一种糟糕的做法 - 时,你可以像下面这样处理你的参数:

Route::group("media", function () {
    Route::get("{category}", "PostController@archivePt");
    Route::get("{category}/{type}/{slug}", "PostController@singlePost");
});

在您的方法中,将这些变量称为:

public function singlePost($category, $type, $slug)
....

答案 1 :(得分:0)

您也可以使用单一路线,

Route::get("{category}/{type?}/{slug?}", "PostController@getPost");

在你的后置控制器

public function singlePost($category, $type = null, $slug = null) {


}

通过这种方式你可以实现,方法重载,使用switch语句来检索结果,如果只有类别来,显示档案,如果类别和类型来,显示该类型的数据列表,如果全​​部三个来找回单个帖子。