【问题标题】:Laravel - multiple urls for one routeLaravel - 一条路线的多个网址
【发布时间】:2015-02-23 22:53:50
【问题描述】:

在这方面找不到任何东西,但我确定它很简单。

当我使用 url 更改查询时,我需要复制 4 次路由。

目前:

Route::get('/', function()
{
  $builds = Blog::findBuilds();
  return View::make('pages/home', compact('builds'));  
});

我想做的是例如:

Route::get(array('/', '/trending', 'staff-picks'), function()
{
  $builds = Blog::findBuilds();
  return View::make('pages/home', compact('builds'));  
});

但这当然行不通。有什么诀窍?

【问题讨论】:

    标签: laravel model-view-controller routes


    【解决方案1】:

    正如 Laravelian 的回答所表明的,您可以而且应该使用动态路由参数。但是,如果你只是这样做

    Route::get('{slug?}', function($slug = null){}
    

    您将捕获每个请求(除了那些与在此之前定义的路由匹配的请求)

    要获得更多控制,请使用正则表达式:

    Route::get('{slug?}', function($slug = 'index')
    {
        $builds = Blog::findBuilds();
        return View::make('pages/home', compact('builds'));  
    })->where('slug', '(trending|staff-picks)');
    

    现在slug 必须是:nothing(因为它是可选参数{...?}trendingstaff-picks

    【讨论】:

    • 完美运行。
    【解决方案2】:
    Route::get('/{slug}', function($slug = null) {
        $builds = Blog::findBuilds($slug);
        return View::make('pages/home', compact('builds')); 
    });
    

    不过,最好将函数放在控制器中,然后以这种方式传递:

    Route::get('/{slug}', 'BlogController@getSlug');
    Route::get('/', 'BlogController@getSlug');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 2018-11-09
      • 2016-04-18
      • 2020-12-03
      • 2019-07-02
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多