【问题标题】:Laravel route optional parameterLaravel 路由可选参数
【发布时间】:2016-11-24 08:53:58
【问题描述】:

我对 Laravel 路由有一个问题。

我有一个函数index($sport = '', $date = ''); 这个函数向我显示特定运动和日期的新闻。但有时这些参数没有输入,我想显示所有新闻。这很好用,问题出在路线上。

这是我使用的路线代码:

Route::get('/news/{sport?}/{date?}.html', ['as' => 'news.index', 'uses' => 'NewsController@index']);

当没有输入运动和日期时出现问题,而不是 URL 是 domain.com/news.html,但没有被该代码捕获。我怎样才能做到这一点?

【问题讨论】:

    标签: php laravel routing


    【解决方案1】:

    如果您将 news 和 sport 视为资源,您可以拥有类似的东西:

    // index case news
    Route::get('/news.html', ['as' => 'news.index', 'uses' => 'NewsController@index']); 
    
    // show case news
    Route::get('/news/{date}.html', ['as' => 'news.show', 'uses' => 'NewsController@show']); 
    
    // index case sport
    Route::get('/news/sport.html', ['as' => 'sport.index', 'uses' => 'SportController@index']); 
    
    // show case sport
    Route::get('/news/sport/{date}.html', ['as' => 'sport.show', 'uses' => 'SportController@show']); 
    

    另一种方法是:

     // index case news
    Route::get('/news.html', ['as' => 'news.index', 'uses' => 'NewsController@index']); 
    
    // sport case
    Route::get('/news/{sport}.html' , ['as' => 'sport.index', 'uses' => 'SportController@index'])
         ->where(['sport' => '[0-9]+']);
    
    // date case
    Route::get('/news/{date}.html', ['as' => 'news.show', 'uses' => 'NewsController@show'])
         ->where(['date' => '[0-9]{4}-[0-9]{1,}-[0-9]{1,}']);
    
    // sport and date case
    Route::get('/news/{sport}/{date}.html' , ['as' => 'sport.index', 'uses' => 'SportController@show'])
         ->where(['sport' => '[0-9]+', 'date' => '[0-9]{4}-[0-9]{1,}-[0-9]{1,}']);
    

    【讨论】:

    • 谢谢@borracciaBlu。你的第二种方法帮助我解决了我的问题:)
    【解决方案2】:

    有很多方法可以做到这一点,但最简单的方法是添加另一个用于显示所有列表的路由,Route::get('/news/','NewsController@index');

    【讨论】:

    【解决方案3】:

    如果你想保持简单,你应该尝试这种方法

    domain.com/news.html?date=2016-11-23&sport=1 
    

    如果在 url 中找不到日期和运动,您可以显示所有结果 如果有人想为这个网址添加书签,这是一种易于阅读的语法。

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2015-11-17
      • 2020-09-01
      相关资源
      最近更新 更多