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();
    }
}
Другие вопросы по тегам