Lagvel's Illuminate paginator не может найти строку запроса
Я работаю над старым проектом PHP, который выполняется в устаревшем SQL-запросе, и это хорошо, но мне нравится использовать конструкторы запросов, такие как Laravel Illuminate SQL package!
Поэтому я добавил все необходимые зависимости пакетов для запуска Illuminate SQL, и этот конструктор запросов, похоже, отлично работает с разбиением на страницы!
$users = Capsule::table('users')->paginate(1)->toArray();
Но пагинатор, похоже, не может прослушать строку запроса! Например, запустив приведенный выше код, он даст некоторые свойства, такие как next_page, previous_page и т. Д.
И когда я пытаюсь передать строку запроса в 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>';
Возвращает пустой массив входных данных,
Что мне не хватает, чтобы использовать пакет http, любая идея будет полезна.
3 ответа
Вы должны установить преобразователь страницы:
\Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') {
return (int) ($_GET[$pageName] ?? 1);
});
Laravel использует этот резольвер.
Вы должны заметить, что paginator не будет использовать другие параметры для строки запроса - он просто использует page
параметр, чтобы получить действительную страницу результатов. Но, например, если вы используете:
http://app.app/?page=2&price=2
это не будет брать из базы данных результатов с ценой = 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'));
Вам нужно извлечь строку запроса в контроллере, чтобы передать параметр get в paginate.
Вы можете использовать
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();
}
}