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

Detaillierte Erläuterung der manuellen Paging-Implementierungsmethode in Laravel

高洛峰
Freigeben: 2016-12-28 16:29:16
Original
1729 Leute haben es durchsucht

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,
    ]);
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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],
]
Nach dem Login kopieren

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;));
}
Nach dem Login kopieren

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() }}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage