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'));
我正在处理一个旧的 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'));