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

高洛峰
Libérer: 2016-12-28 16:29:16
original
1730 Les gens l'ont consulté

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,
    ]);
}
Copier après la connexion

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);
}
Copier après la connexion

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],
]
Copier après la connexion

, 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;));
}
Copier après la connexion

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() }}
Copier après la connexion

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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal