如何在laravel中进行分页以返回json格式的值

时间:2014-05-26 09:13:11

标签: laravel laravel-4

我有客户端控制器发送请求和服务器控制器来处理请求并发送响应。

如何在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);

}

2 个答案:

答案 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);
}