Laravel 的 Illuminate 分页器找不到查询字符串

Laravel's Illuminate paginator can't find query string

我正在处理一个旧的 PHP 项目,即 运行ning 在遗留 SQL 查询中,这很好,但我喜欢使用像 [=45 这样的查询构建器=]点亮SQL包!

所以我已经将所有必需的包依赖项添加到 运行 Illuminate SQL,而且这个查询构建器似乎可以很好地处理分页!

$users = Capsule::table('users')->paginate(1)->toArray();

但是,分页器似乎无法监听查询字符串!例如,通过 运行ning 上面的代码,它会给出一些属性,如 next_page , previous_page 等...

当我尝试在 URL 中传递查询字符串时,它无法从查询字符串中获取数据(来自 GET 请求)!

访问此页面 http://app.app/?page=2 会得到相同的结果集。

我应该如何配置 Illuminate sql 包以便它也可以侦听查询字符串?

编辑

此外,我尝试使用 illuminate/http 包,但 $request->all() 方法总是 returns 一个空数组!这是代码:

<?php
  require_once './vendor/autoload.php';
  use \Illuminate\Http\Request;

  $req = new Request();

  echo '<pre>';
  print_r($req->all());
  echo '</pre>';

它returns空输入数据数组,

我在使用 http 包时缺少什么,任何想法都会有所帮助。

您必须设置页面解析器:

\Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') {
    return (int) ($_GET[$pageName] ?? 1);
});

Laravel 使用 this 解析器。

  • 需要在controller中获取query string来传递get参数 分页。

  • 您可以使用 Illuminate\Http\Request class 来接收和使用 HTTP 负载。

你的控制器文件:

<?php

use Illuminate\Http\Request;
class YourControllerClassName{
    public function someFunction(Request $request){
         echo "<pre>";
         print_r($request->all());
         print_r($request->input('page'));
         $users = Capsule::table('users')->paginate($request->input('page'))->toArray();
    }
}

您需要注意,分页器不会将其他参数用于查询字符串 - 它仅使用 page 参数来获取有效的结果页面。但是例如,如果您使用:

http://app.app/?page=2&price=2

它不会从价格为 2 的数据库结果中获取 - 这是您的工作。

然而,第二件事是由分页器生成的 url。

如果你这样做:

$users = Capsule::table('users')->paginate(1);

你也可以在下一行使用

$users->appends(request()->except('page'));

这会将查询字符串(页面除外)中的所有其他参数添加到 url,因此 first_page_url 将包含请求中的所有其他参数。

您也可以使用像这样的流畅语法来包装它:

$users = Capsule::table('users')->paginate(1)->appends(request()->except('page'));