Heim >php教程 >PHP开发 >Detaillierte Erläuterung der manuellen Paging-Implementierungsmethode in Laravel

Detaillierte Erläuterung der manuellen Paging-Implementierungsmethode in Laravel

高洛峰
高洛峰Original
2016-12-28 16:29:161725Durchsuche

Das Beispiel in diesem Artikel beschreibt die Implementierungsmethode des manuellen Pagings in Laravel. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Das Demonstrationsbeispiel hier basiert auf Laravel Version 5.2

Während des Entwicklungsprozesses gibt es eine Situation, Sie fordern die Java-API an um Informationen zu erhalten, da es viele Informationen gibt und diese auf Seiten angezeigt werden müssen. Laravel bietet offiziell eine einfache Methode, paginate($perPage), aber diese Methode gilt nur für Modell- und Abfrage-Builder.

Heute werde ich darüber sprechen, wie man bei einem Array den gleichen Effekt wie mit der Paginierungsmethode erzielt.

Sehen Sie sich den Quellcode der Paginierungsmethode an

#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
    $query = $this->toBase();
    $total = $query->getCountForPagination();
    $this->forPage(
      $page = $page ?: Paginator::resolveCurrentPage($pageName),
      $perPage = $perPage ?: $this->model->getPerPage()
    );
    return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, [
      'path' => Paginator::resolveCurrentPath(),
      'pageName' => $pageName,
    ]);
}

Wie Sie oben sehen können, liegt der Schlüssel zum Paginieren in LengthAwarePaginator.

Konstruktionsmethode von LengthAwarePaginator.

public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
{
    foreach ($options as $key => $value) {
      $this->{$key} = $value;
    }
    $this->total = $total;
    $this->perPage = $perPage;
    $this->lastPage = (int) ceil($total / $perPage);
    $this->path = $this->path != '/' ? rtrim($this->path, '/') : $this->path;
    $this->currentPage = $this->setCurrentPage($currentPage, $this->lastPage);
    $this->items = $items instanceof Collection ? $items : Collection::make($items);
}

Tatsächlich ist es bereits sehr klar. Wenn das auszulagernde Array

[
  ['username'=>'zhangsan', 'age'=>26],
  ['username'=>'lisi', 'age'=>23],
  ['username'=>'wangwu', 'age'=>62],
  ['username'=>'zhaoliu', 'age'=>46],
  ['username'=>'wangmazi', 'age'=>25],
  ['username'=>'lanzi', 'age'=>24],
  ['username'=>'pangzi', 'age'=>21],
]

ist, gibt es insgesamt 7 Datenelemente und auf jeder Seite werden 3 angezeigt Teile mit insgesamt 3 Seiten

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Http\Request;
# 仅做演示 #
function userList(Request $request) {
  $users = [
    ['username'=>'zhangsan', 'age'=>26],
    ['username'=>'lisi', 'age'=>23],
    ['username'=>'wangwu', 'age'=>62],
    ['username'=>'zhaoliu', 'age'=>46],
    ['username'=>'wangmazi', 'age'=>25],
    ['username'=>'lanzi', 'age'=>24],
    ['username'=>'pangzi', 'age'=>21]
  ];
  $perPage = 3;
  if ($request->has('page')) {
      $current_page = $request->input('page');
      $current_page = $current_page <= 0 ? 1 :$current_page;
  } else {
      $current_page = 1;
  }
  $item = array_slice($users, ($current_page-1)*$perPage, $perPage); //注释1
  $total = count($users);
  $paginator =new LengthAwarePaginator($item, $total, $perPage, $currentPage, [
      &#39;path&#39; => Paginator::resolveCurrentPath(), //注释2
      &#39;pageName&#39; => &#39;page&#39;,
  ]);
  $userlist = $paginator->toArray()[&#39;data&#39;];
  return view(&#39;userlist&#39;, compact(&#39;userlist&#39;, &#39;paginator&#39;));
}

Der Fokus des obigen Codes liegt auf $item. Wenn Kommentar 1 nicht verarbeitet wird, werden alle 7 Daten abgerufen.

Hinweis 2 besteht darin, eine URL-Adresse festzulegen, die paginiert werden soll. Es kann auch manuell über $paginator ->setPath('path') festgelegt werden.

Die Paging-Verbindung in der Seite wird auch auf die gleiche Weise aufgerufen:

{{ $paginator->render() }}

Korrektur!

Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Laravel-Framework hilfreich sein wird.

Ausführlichere Erläuterungen zu den manuellen Paging-Implementierungsmethoden von Laravel und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn