我需要Illuminate/pagination
进入我的Slim 3项目
我的路线中有以下内容:
$this->get('/traces', 'UserController:getTraces')->setName('user.traces');
在getTraces方法中:
public function getTraces($req, $res)
{
$loginRows = $this->db->table('login_history')->where('user_id', $_SESSION['user'])->orderBy('id', 'desc')->paginate(5);
$loginRows->setPath($this->router->pathFor('user.traces'));
$this->view->getEnvironment()->addGlobal('login_rows', $loginRows);
return $this->view->render($res, 'user/traces.twig');
}
在我看来(我正在使用Twig):
{{ login_rows.render() | raw }}
所以一切都运行得很好,而且分页html链接,但即使我去了?page=2
或任何其他页面。它始终显示具有相同行的第一页1。它说它检测到页码,但显然它是错的,有没有办法我可以手动设置页码或修复问题实际上是在我的代码中?
提前致谢。
答案 0 :(得分:2)
如果有人有兴趣,我就是这么做的:
$loginRows = $this->db->table('login_history')->where('user_id', $_SESSION['user'])->orderBy('id', 'desc')->paginate(5, ['*'], 'page', $req->getParam('page'));
$loginRows->setPath($this->router->pathFor('user.traces'));
这解决了我的问题,我确信有更好的解决方案,但至少这个有效!
答案 1 :(得分:0)
问题是Eloquent的Paginator不知道如何从Slim的路由器中提取“ page”参数。但是您可以给它一个新功能来提供帮助。在这里,我创建了一个中间件,该中间件告诉Paginator如何找到“ page”参数。
<?php
/**
* Tells the Eloquent Paginator how to get the current page
*/
namespace App\Middleware;
class Pagination {
public function __invoke($request, $response, $next)
{
\Illuminate\Pagination\Paginator::currentPageResolver(function() use ($request) {
return $request->getParam('page');
});
return $next($request, $response);
}
}
然后在设置应用程序时,可以添加以下内容:
$app->add(new App\Middleware\Pagination);
请注意,它将为每个页面请求(即使是没有分页的请求)运行。我怀疑这真的会影响性能。如果有必要,您可以将其应用于特定路线。或在查询之前调用currentPageResolver()。