Php Laravel 5-在头中而不是JSON中对结果进行分页

Php Laravel 5-在头中而不是JSON中对结果进行分页,php,json,laravel,api,pagination,Php,Json,Laravel,Api,Pagination,我现在正在处理我在Laravel制作的API中搜索结果的分页,我在文档中遇到了这个问题: 这看起来不错,但同时我非常担心它会改变结果的结构,因为它将返回的数据隐藏在“data”键中 问题是,到目前为止,我一直在返回一个未分页的JSON编码的对象数组,以这种方式包含分页要么需要在前端进行显著的修改,要么会在整个API中带来不一致性(会有返回嵌套数据的API调用和直接返回数据的其他API调用——我不喜欢这样) 我可能更希望在响应的标题中包含分页元数据,这不会打乱我当前的响应结构。您知道这样的现成解

我现在正在处理我在Laravel制作的API中搜索结果的分页,我在文档中遇到了这个问题:

这看起来不错,但同时我非常担心它会改变结果的结构,因为它将返回的数据隐藏在“data”键中

问题是,到目前为止,我一直在返回一个未分页的JSON编码的对象数组,以这种方式包含分页要么需要在前端进行显著的修改,要么会在整个API中带来不一致性(会有返回嵌套数据的API调用和直接返回数据的其他API调用——我不喜欢这样)


我可能更希望在响应的标题中包含分页元数据,这不会打乱我当前的响应结构。您知道这样的现成解决方案吗(理想情况下是Laravel包)或者你会推荐我用什么其他方法来解决我的困境呢?

提示:永远不要坚持错误,否则你会下地狱,相信我

上面这句话的意思是,你的前端是个问题,而不是laravel响应,我在许多应用程序中使用了这种分页方式,这些方式对我来说一直都很有效,这意味着
page\u data
page\u meta\u data
在一个对象中提供,因为它们属于同一个对象

我想给你们看两个例子

Instagram

Airbnb

我不是说这些都是标准,但你仍然可以认为这是最好的方法

Laravel套餐

我几乎100%确信没有laravel软件包可供您帮助

针对您的问题进行破解/修复

Laravel始终为您提供向响应添加标题的自由

return response()->headers($key, $value)->headers($key, $value);

免责声明:这不是正确的方法,更确切地说,这甚至不是一个接近正确的方法。

API中的分页信息似乎有两个选项-在响应正文中和Laravel一样,在标题信息中(如)

我自己在Laravel的一个新项目中遇到了这个问题,我几乎已经决定要在标题中进行分页——这感觉有点正确(不可否认,这是一个激烈争论的话题)

我还没有构建这个,所以随着时间的推移,我的想法可能会改变,但是构建一个中间件并将其连接到API组似乎是一个方向

在该中间件中,我们需要在添加头之前获得完整响应,例如:

public function handle($request, Closure $next, $guard = null)
{
    // let other middleware handle the request first
    $response = $next($request);

    // get paging links here
    // <url>; rel="next", <url>; rel="prev", <url>; rel="first", <url>; rel="last"
    $response->header("Link: " . $links);

    return $response;
}
公共函数句柄($request,Closure$next,$guard=null)
{
//让其他中间件先处理请求
$response=$next($request);
//在此处获取分页链接
//;rel=“next”;;rel=“prev”;;rel=“first”;;rel=“last”
$response->header(“链接:”.$links);
返回$response;
}

建议也阅读Laravel文档。

我也有同样的问题。我喜欢链接头分页,github使用它,因为响应体只包含“原始”数据,而不包含元数据

我认为这个Laravel中间件示例可以帮助您

Route::get('items', 'ItemController@index')->middleware('link-header-pagination');

这并没有回答如何将分页数据放在标题中的问题。此外,还有许多API在标题中返回分页数据的(计数器)示例。嗨@bzeaman,我想我已经添加了这个标题分页内容
return response()->headers($key,$value)->headers($key,$value);