Maison >php教程 >PHP开发 >Explication détaillée de la méthode d'implémentation de la pagination manuelle dans Laravel

Explication détaillée de la méthode d'implémentation de la pagination manuelle dans Laravel

高洛峰
高洛峰original
2016-12-28 16:29:161727parcourir

L'exemple de cet article décrit la méthode d'implémentation de la pagination manuelle dans Laravel. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

L'exemple de démonstration ici est basé sur Laravel version 5.2

Il y a une situation pendant le processus de développement, vous demandez l'API Java pour obtenir des informations, car les informations sont nombreuses et doivent être affichées en pages. Laravel fournit officiellement une méthode simple, paginate($perPage), mais cette méthode s'applique uniquement au générateur de modèles et de requêtes.

Aujourd'hui, je vais parler de la façon d'obtenir le même effet que la méthode paginate avec un tableau.

Afficher le code source de la méthode paginate

#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,
    ]);
}

Comme vous pouvez le voir ci-dessus, la clé de la pagination réside dans lengthAwarePaginator.

Méthode de construction de 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);
}

En fait, c'est déjà très clair. Si le tableau à paginer est

[
  ['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],
]

, il y a 7 données au total, et chaque page en affichera 3. morceaux, avec un total de 3 pages

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;));
}

Le code ci-dessus se concentre sur $item Si le commentaire 1 n'est pas traité, les 7 éléments de données seront obtenus.

La remarque 2 consiste à définir une adresse URL à paginer. Il peut également être défini manuellement via $paginator ->setPath('path').

La connexion de pagination dans la page s'appelle également de la même manière :

{{ $paginator->render() }}

Correction !

J'espère que cet article sera utile à la conception de programmes PHP basés sur le framework Laravel.

Pour des explications plus détaillées sur les méthodes d'implémentation de la pagination manuelle de Laravel et les articles connexes, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn