在 Laravel 中向 API 资源链接添加参数 [重复]

Posted

技术标签:

【中文标题】在 Laravel 中向 API 资源链接添加参数 [重复]【英文标题】:Add parameters to API Resource links in Laravel [duplicate] 【发布时间】:2018-02-26 11:25:40 【问题描述】:

我的 Laravel 5.5 应用中有很多 API 资源。到目前为止,它们很棒,但我在分页链接中保留 URL 参数时遇到问题。

请看下面的例子 网址:/posts?unreviewed=true

    public function getPosts(Request $request)

    /*
     * Gets a list of posts.
     *
     * Options:
     *  - unreviewed: gets posts without revisions (default: false)
     *
     */

    $pagination = 20;

    //Check constrains
    if($request->unreviewed == true)
        return SocialPostResource::collection(SocialPost::with(['images', 'publication.images'])
            ->doesntHave('revisions')
            ->paginate($pagination));
    

    return SocialPostResource::collection(SocialPost::with(['images', 'publication.images'])->paginate($pagination));


以下示例仅包括已修改的帖子。这在第一个查询中完美运行。问题是分页结果在 URL 中不包含“reviewed=true”参数,因此第 2 页及以后的页面将返回所有帖子。我需要所有 URL 都包含原始请求中传递的任何参数。

“data”:...,
“links”:
   ...
   “next”: “/posts?page=2”

我期望的结果是“/posts?unreviewed=true&page=2”

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。事实上,多亏了你的问题,我找到了this similar post,它帮助我找到了适合我的解决方案。

请试试这个:

// You must add this Facade in the 'use' section of your file:
use Illuminate\Support\Facades\Input;

return SocialPostResource::collection(
    SocialPost::with(['images', 'publication.images'])
    ->paginate($pagination)
    ->appends(Input::except('page')) // <- Add this line!
);

【讨论】:

我将此标记为已接受的响应。但是,请注意“附加”必须放在集合部分内,如下所示:return SocialPostResource::collection(SocialPost::with(['images', 'publication.images','brands','products']) -&gt;has('brands') -&gt;paginate($pagination) -&gt;appends(Input::except('page'))); Diego 的响应将其放在外面,这破坏了一些 json 结构。

以上是关于在 Laravel 中向 API 资源链接添加参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.6 中向资源控制器添加自定义方法

如何在 Forge API 中向元素添加参数

如何在 laravel 中向手动注册事件监听器添加测试?

Laravel 验证请求和 API 路由 POST 参数

laravel 路由参数的默认值怎么设置

如何在 win32 API 中向 Skins 添加控件