Laravel路线可选参数

时间:2016-11-24 08:53:58

标签: php laravel routing

我对Laravel路线有一个问题。

我有一个功能index($sport = '', $date = '');此功能向我显示特定运动和日期的新闻。但有时这些参数没有输入,我想显示所有新闻。这种方法非常好,问题在于路线。

这是我使用的路线代码:

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

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

3 个答案:

答案 0 :(得分:2)

如果您将newssport视为资源,您可以拥有类似的内容:

// 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,}']);

答案 1 :(得分:1)

theres有很多方法,但是最简单的方法是,只需添加另一条路径来显示所有列表,Route::get('/news/','NewsController@index');

答案 2 :(得分:0)

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

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

如果在网址中找不到日期和运动,则可以显示所有结果 如果有人想要将此网址加入书签,那么这种语法很容易理解。