LaravelPagination 链接不包括其他 GET 参数

我使用雄辩与 Laravel 4的分页类一起。

问题: 当 URL 中有一些 GET 参数时,例如: http://site.example/users?gender=female&body=hot,产生的分页链接只包含 page参数,没有其他内容。

刀片模板

{{ $users->link() }}

这里有一个 ->append()函数,但是当我们不知道有多少 GET 参数的时候,我们如何使用 append()在分页的链接中包含其他 GET 参数,而不让整块的 if代码弄乱我们的刀片模板呢?

136394 次浏览

编辑: 康纳的意见与迈赫迪的回答是必要的,使这项工作。感谢他们的澄清。

->appends()可以接受数组作为参数,您可以传递 Input::except('page'),这应该可以做到这一点。

例如:

return view('manage/users', [
'users' => $users->appends(Input::except('page'))
]);

请注意 Input::all(),它将包括以前的 ?page=值一次又一次在每个页面你打开!
例如,如果你在 ?page=1并且你打开下一个页面,它将打开 ?page=1&page=2 < br/> ,所以最后一个值页面将是你看到的页面!不是你想看的那一页

解决方案: 使用 Input::except(array('page'))

不是 append()而是 appends() 所以,正确的答案是:

{!! $records->appends(Input::except('page'))->links() !!}

拉维尔5号

视图必须包含以下内容:

{!! $myItems->appends(Input::except('page'))->render() !!}

我认为你应该在 Laravel 5 + 版本中使用这段代码。 这不仅适用于参数 page,也适用于任何其他参数:

$users->appends(request()->input())->links();

就个人而言,我尽量避免使用 Facades。使用全局助手函数代码更少,也更优雅。

更新:

不要使用 Input Facade,因为它在 Laravel v6 + 中已被弃用

使用此结构,以保持所有输入参数,但页面

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

为什么?

1)你把那样添加到请求中的所有东西都去掉

  $request->request->add(['variable' => 123]);

2)不需要 $request 作为函数的输入参数

3)你不包括「网页」

附言) ,它适用于 Laravel 5.1

传递页码作为分页。类似于这样的东西

$currentPg = Input::get('page') ? Input::get('page') : '1';
$boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

你可以用

->appends(request()->query())

控制器中的例子:

$users = User::search()->order()->with('type:id,name')
->paginate(30)
->appends(request()->query());


return view('users.index', compact('users'));

视图中的例子:

\{\{ $users->appends(request()->query())->links() }}

将此包括在您的视图中 翻页

 $users->appends(Input::except('page'))

对于谁一个在幼虫5或以上 刀刃:

\{\{ $table->appends(['id' => $something ])->links() }}

可以获得传递的项

$passed_item=$request->id;

测试一下

dd($passed_item);

你必须得到值钱的东西

Laravel 7.x 及以上版本为 paginator 添加了新的方法:

->withQueryString()

所以你可以这样使用它:

\{\{ $users->withQueryString()->links() }}

7倍以下幼虫的使用:

\{\{ $users->appends(request()->query())->links() }}

在 Laravel 7.x 中,你可以这样使用它:

\{\{ $results->withQueryString()->links() }}

这里的许多解决方案都提到了使用 Input..。

Input在 Laravel 6,7,8被移除了

使用 Request代替。

下面是我在 Laravel 8项目中使用的刀片语句:

\{\{$data->appends(Request::except('page'))->links()}}

其中 $data是包含分页数据的 PHP 对象。

感谢 亚历山大 · 达诺此评论中指出了这一点。

在您的控制器中,分页后添加 withQueryString () ,如下所示

$post = Post::paginate(10)->withQueryString();