Lagvel's Illuminate paginator не может найти строку запроса - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над старым проектом PHP, который выполняется в устаревшем SQL-запросе, и это хорошо, но мне нравится использовать конструкторы запросов, такие как Laravel Illuminate SQL package!

Итак, я добавил все необходимые зависимости пакетов для запуска Illuminate SQL, и этот конструктор запросов, похоже, отлично работает с разбиением на страницы!

$users = Capsule::table('users')->paginate(1)->toArray();

Но пагинатор, похоже, не может прослушать строку запроса! Например, при запуске приведенного выше кода он даст некоторые свойства, такие как, next_page, previous_page и т. Д. *

enter image description here

И когда я пытаюсь передать строку запроса в URL, он не может извлечь данные из строки запроса (из запроса GET)!

Посещение этой страницы http://app.app/?page=2 даст тот же набор результатов.

Как мне настроить sql-пакет Illuminate, чтобы он также мог прослушивать строки запроса?

EDIT

Кроме того, я пытался использовать пакет illuminate/http, но метод $request->all() всегда возвращает пустой массив! Вот код:

<code><?php
  require_once './vendor/autoload.php';
  use \Illuminate\Http\Request;

  $req = new Request();

  echo '<pre>';
  print_r($req->all());
  echo '
';

Возвращает пустой массив входных данных, enter image description here

Что мне не хватает, чтобы использовать пакет http, любая идея будет полезна.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018
  • Вам нужно извлечь строку запроса в контроллере, чтобы передать параметр 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();
    }
}
0 голосов
/ 17 сентября 2018

Вы должны заметить, что paginator не будет использовать другие параметры для строки запроса - он просто использует параметр page, чтобы получить действительную страницу результатов.Но, например, если вы используете:

http://app.app/?page=2&price=2

, он не будет извлекать результаты из базы данных с ценой = 2 - это ваша работа, чтобы сделать это.

Однако 2-ая вещь - это URL, сгенерированныеPaginator.

Если вы сделаете это следующим образом:

$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'));
0 голосов
/ 17 сентября 2018

Вы должны установить преобразователь страницы:

\Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') {
    return (int) ($_GET[$pageName] ?? 1);
});

Laravel использует этот распознаватель.

...