Тонкий, с нумерацией страниц, всегда страница 1

Мне требуется 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 с одинаковыми строками. Он говорит, что он определяет номер страницы, но, очевидно, это неправильно, есть ли способ, которым я могу установить номер страницы вручную или исправить, если проблема на самом деле в моем коде?

Заранее спасибо.

1

Решение

Если кому-то интересно, я просто так и сделал:

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

Это исправило мою проблему, я уверен, что есть лучшее решение, но по крайней мере это работает!

2

Другие решения

Проблема в том, что Eloquent Paginator не знает, как извлечь параметр «page» из маршрутизатора Slim. Но вы можете дать ему новую функцию, чтобы помочь. Здесь я создал промежуточное программное обеспечение, которое сообщает 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 () непосредственно перед вашим запросом.

0

По вопросам рекламы [email protected]