我对Laravel路线有一个问题。
我有一个功能index($sport = '', $date = '');
此功能向我显示特定运动和日期的新闻。但有时这些参数没有输入,我想显示所有新闻。这种方法非常好,问题在于路线。
这是我使用的路线代码:
Route::get('/news/{sport?}/{date?}.html', ['as' => 'news.index', 'uses' => 'NewsController@index']);
当没有输入运动和日期时,问题出现了,而不是URL是domain.com/news.html,但是没有被该代码捕获。我怎样才能做到这一点?
答案 0 :(得分:2)
如果您将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,}']);
答案 1 :(得分:1)
theres有很多方法,但是最简单的方法是,只需添加另一条路径来显示所有列表,Route::get('/news/','NewsController@index');
答案 2 :(得分:0)
如果你想保持简单,你应该尝试这种方法
domain.com/news.html?date=2016-11-23&sport=1
如果在网址中找不到日期和运动,则可以显示所有结果 如果有人想要将此网址加入书签,那么这种语法很容易理解。