我有客户端控制器发送请求和服务器控制器来处理请求并发送响应。
如何在laravel中对响应json数据进行分页。
服务器控制器
public function index() {
$data = languages::where('is_active','1')->orderBy('id','desc')->get();
$response = Response::json($data,200);
return $response;
}
客户端控制器
public function index()
{
$url = url('languagesService');
$data = json_encode(array("username" => $this -> username,"password" => $this -> password));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER,false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = CURL_EXEC($ch);
$data = json_decode($response);
return View::make("languages.index")->with("data",$data);
}
答案 0 :(得分:0)
我想,这很简单。你尝试过类似的东西吗?
public function index() {
$data = languages::where('is_active','1')->orderBy('id','desc')->paginate($perPage);
$response = Response::json($data,200);
return $response;
}
<强> UPD:强>
如果你想在index()
动作的其他地方分页,那么你应该通过本机Paginator类手动创建paginator对象。您可以找到其他信息here。作为简单示例,您应该在客户端控制器上执行:
$paginator = Paginator::make($data, count($data), $perPage);
然后使用$paginator
对象来实现您想要的效果。
答案 1 :(得分:0)
您可以简单地返回该集合,它将转换为JSON本身。
public function index() {
return languages::where('is_active','1')->orderBy('id','desc')->paginate();
}
// If you add `page` param into URL, Eloquent gets you content for specified page.
$url = url('languagesService', ['page'=>0]);
// $url = url('languagesService', ['page'=>20]);
我建议您发送上一页/下一页的链接以及项目总数,以便API使用者可以根据需要检索更多元素。
public function index() {
$data [
'data' => languages::where('is_active','1')->orderBy('id','desc')->paginate()->toArray(),
'total' => getNumberOfAllEntitiesThatFitFilter(),
'nextPage' => getUrlForNextPage(),
'previousPage' => getUrlForPreviousPage(),
];
return Response::json($data);
}