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

时间:2018-09-17 18:40:27

标签: php laravel laravel-5 illuminate-container laravel-pagination

我正在处理一个旧的PHP项目,该项目在旧版SQL查询中运行,这很好,但是我喜欢使用Laravel Illuminate SQL程序包之类的查询构建器!

因此,我已经添加了运行Illuminate SQL所需的所有程序包依赖关系,并且此查询构建器似乎可以在分页中正常工作!

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

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

enter image description here

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

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

我应该如何配置Illuminate sql程序包,使其也可以侦听查询字符串?

编辑

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

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

  $req = new Request();

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

它返回空的输入数据数组, enter image description here

我缺少使用http软件包的内容,任何想法都会有所帮助。

3 个答案:

答案 0 :(得分:3)

您必须设置页面解析器:

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

Laravel使用this解析器。

答案 1 :(得分:1)

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

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

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

第二点是分页器生成的网址。

如果您这样做:

$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'));

答案 2 :(得分:0)

  • 您需要在控制器中获取查询字符串,才能将get参数传递给 分页。

  • 您可以使用Illuminate\Http\Request类来接收和使用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();
    }
}