【问题标题】:Laravel Pagination links not including other GET parametersLaravel 分页链接不包括其他 GET 参数
【发布时间】:2013-06-14 02:25:00
【问题描述】:

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

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

刀片模板

{{ $users->link() }}

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

【问题讨论】:

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

标签: pagination laravel laravel-4 eloquent blade


【解决方案1】:

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

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

请改用Request

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

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

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

感谢Alexandre Danaultthis comment 中指出这一点。

【讨论】:

    【解决方案2】:

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

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

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

    更新:

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

    【讨论】:

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

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

    ->withQueryString()
    

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

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

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

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

    【讨论】:

    • 哇,仅一行一行就令人惊叹。我错过了文档。虽然 7.x 是爱
    • 您提供了 2 种方法。请区分它们并提供信息,哪一种更好,更有用
    • @MR_AMDEV 引擎盖后面都是一样的。 Laravel 刚刚在其最新版本中采用了它。
    • @RikeshShrestha 有没有办法用它对查询参数进行urlencode?​​span>
    • 如果你有一个空白参数值也使用 if (isset($_GET['search_text'])) { $search_text = $_GET['search_text']; } 其他 { $search_text = ""; }
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      适用于 laravel 5 或更高版本的用户 在刀片中:

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

      你可以得到传递的项目

      $passed_item=$request->id;
      

      测试一下

      dd($passed_item);
      

      你必须得到 $something 价值

      【讨论】:

        【解决方案6】:

        使用这种结构,保留除页面之外的所有输入参数

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

        为什么?

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

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

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

        3)您正在排除“页面”

        PS) 它适用于 Laravel 5.1

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            你可以使用

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

            【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

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

              【讨论】:

                【解决方案11】:

                LARAVEL 5

                视图必须包含以下内容:

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

                【讨论】:

                  【解决方案12】:

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

                  ->appends() 可以接受一个数组作为参数,你可以传递Input::except('page'),这样就可以了。

                  例子:

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

                  【讨论】:

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-06-20
                    • 2018-04-30
                    • 1970-01-01
                    • 2019-01-21
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-02-08
                    相关资源
                    最近更新 更多