【问题标题】:Laravel:54 use one route for the same routsLaravel:54 对同一条路线使用一条路线
【发布时间】:2017-04-19 12:00:57
【问题描述】:

我想要两个只使用两个路由并获取(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. 我无法在此处获取(mp3 或专辑,..):

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

【问题讨论】:

    标签: php laravel routes


    【解决方案1】:

    由于您使用的是相同的控制器 -这被认为是一种不好的做法-,您可以像下面这样处理您的参数:

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

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

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

    【讨论】:

    • 似乎没问题!但是在这个 url localhost:8000/admin/post/new 404 :(((
    • “因为你使用的是同一个控制器——这被认为是一种不好的做法——”你需要为每组路由编写单独的控制器,这样可以避免这样的错误
    • 至少为您的 PostController 路线创建一个独特的组,例如,我已经用 'media' route group 更新了我的答案,这样您就可以轻松地对您的路线进行分类/分组.
    【解决方案2】:

    你也可以使用单路,

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

    在你的帖子控制器中

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 1970-01-01
      • 2020-05-27
      • 2016-06-04
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多