Laravel 5.3分页相当于API的URL

时间:2017-03-21 21:22:19

标签: php api pagination laravel-5.3

有没有办法在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'));

请求和响应在上面..

1 个答案:

答案 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/