ChatGPT解决这个技术问题 Extra ChatGPT

Laravel 分页链接不包括其他 GET 参数

我将 Eloquent 与 Laravel 4 的分页类一起使用。

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

刀片模板

{{ $users->link() }}

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

你可以简单地做: {{ $users->withQueryString()->links() }} 在 laravel 版本 7 及以上

L
Limon Monte

编辑:康纳对 Mehdi 的回答的评论是完成这项工作所必需的。感谢他们的澄清。

->appends() 可以接受一个数组作为参数,您可以传递 Input::except('page'),这应该可以解决问题。

例子:

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

请注意,其他 Google 员工会以这种方式出现 - 它现在是复数 appendsnot append。正确的链接类似于 $query->appends($foo)->links();
我发现 $query->appends(Input::except('page'))->links(); 效果更好。否则,当您单击页面时,页面变量不会更新。 Laravel 4.1.24。
...然后我向下滚动查看 Mehdi 的解决方案。
拉拉维尔 5:{!! $myItems->appends(Input::except('page'))->render() !!}
在 laravel 5.2 你应该使用 Request 而不是 Input
A
Amir Hassan Azimi

我认为您应该在 Laravel 5+ 版中使用此代码。此外,这不仅适用于参数 page,还适用于任何其他参数:

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

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

更新:

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


这适用于 laravel 5.6,使用接受的答案解决方案对我造成了错误。
我还在一个 5.3 项目上成功实现了这一点;我也喜欢这种简单的方法
另外,我注意到您不需要在此解决方案中使用 except('page')
但是,除了您试图避免的外观之外,还有什么全局辅助功能?...
这在 laravel 8 中有效,更有用和简单的解决方案。
A
AKOP

你可以使用

->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() }}

这是 Mohamed Said(Laravel 员工)建议的方式,请参阅:github.com/laravel/framework/issues/…
M
Mehdi Maghrouni

注意 Input::all() ,它将在您打开的每个页面中一次又一次地包含以前的 ?page= 值!
例如,如果您在 ?page=1 并打开下一页,它将打开 ?page=1&page=2
所以最后一个值页面将是您看到的页面!不是您想查看的页面

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


S
Shrestharikesh

Laravel 7.x 及更高版本为分页器添加了新方法:

->withQueryString()

所以你可以像这样使用它:

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

对于低于 7.x 的 laravel,请使用:

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

哇,它惊人的只是一条线。我错过了文档。虽然 7.x 是爱
您提供了 2 种方法。请区分它们并提供信息,哪一种更好,更有用
引擎盖后面的@MR_AMDEV 两者都是相同的。 Laravel 刚刚在其最新版本中采用了它。
@RikeshShrestha 有没有办法用它对查询参数进行urlencode?
如果你有一个空白参数值,也使用 if (isset($_GET['search_text'])) { $search_text = $_GET['search_text']; } 其他 { $search_text = ""; }
B
Bald

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

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

e
ecairol

拉拉维尔 5

视图必须包含以下内容:

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


Y
Yevgeniy Afanasyev

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

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

为什么?

1)您删除添加到请求中的所有内容

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

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

3)您正在排除“页面”

PS)它适用于 Laravel 5.1


S
Siva Ganesh

将其包含在您的视图页面中

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

M
Mostafa Asadi

对于刀片中 laravel 5 或更高版本的人:

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

你可以得到通过的项目

$passed_item=$request->id;

测试它

dd($passed_item);

你必须得到 $something 价值


M
Mostafa Norzade

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

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

C
Cengkuru Michael

也传递页码进行分页。像这样的东西

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


M
Miraj Khandaker

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

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

M
Max Stevens

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

Input 已在 Laravel 6、7、8 中移除

请改用 Request

这是在我的 Laravel 8 项目中起作用的刀片语句:

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

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

感谢在 this comment 中指出这一点的 Alexandre Danault


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅