有没有办法在Laravel 5.3中获得一个分页漂亮的URL?
例如,默认情况下:
搜索关键字为:something new
http://localhost/project/search/something%20new?page=2
{
"total": 19,
"per_page": 5,
"current_page": 1,
"last_page": 4,
"next_page_url": "http://localhost/project/search/something%20new?page=2",
"prev_page_url": null,
"from": 1,
"to": 5,
"data": [
{
// result
}
]
}
我想得到什么:
http://localhost/project/search/?page=2
此外,分页应该以这种方式呈现,并且附加分页应该以这种方式出现。
控制器。
public function search(Request $request)
{
$search = $request->name;
$searchValues = preg_split('/\s+/', $search, -1, PREG_SPLIT_NO_EMPTY);
$result = abcModel::where( function ($q) use ($searchValues) {
foreach ($searchValues as $value ) {
$q->orWhere('city', 'like', "%{$value}%");
$q->orWhere('country', 'like', "%{$value}%");
$q->orWhere('name', 'like', "%{$value}%");
} })
->orderby('id','desc')
->paginate(20);
return response()->json( $result );
}
路线,
Route::post('search/',array('uses' => 'abcController@search'));
请求和响应在上面..
答案 0 :(得分:1)
您需要切换用于搜索路径的HTTP方法,以通过POST而不是GET发送查询字符串。因此,如果没有发布代码,我假设您设置了这样的路线:
Route::get('project/search/{query}', 'ExampleController@search');
这会改为
Route::post('project/search/', 'ExampleController@search');
只要您使用传递给控制器的Request对象处理实际数据并在POST主体中保持与GET查询参数相同的名称,就应该对代码进行最少的修改,如果需要的话所有
您可以更进一步,并处理POST正文中的page
参数,将您的网址保留为http://localhost/project/search/
。