Maison > développement back-end > tutoriel php > Explication détaillée de l'exemple d'effet de pagination personnalisé Laravel

Explication détaillée de l'exemple d'effet de pagination personnalisé Laravel

小云云
Libérer: 2023-03-19 20:58:02
original
1393 Les gens l'ont consulté

La pagination de Laravel est très pratique, et elle est en fait assez facile à étendre. Faisons un exemple ci-dessous, en étendant les méthodes paginate() et simplePaginate() pour implémenter notre style de pagination personnalisé, comme l'affichage de "page précédente" et " page suivante" au lieu de """ et """. Bien sûr, si vous maîtrisez la méthode d'expansion, vous pouvez sans scrupules développer une pagination souhaitée, par exemple sauter à une certaine page et afficher le nombre total d'enregistrements dans la pagination. , la plage d'enregistrement actuellement affichée, etc. . .

5.1 et 5.2 devraient être la même méthode. J'utilise ici la version 5.2. La documentation nous indique que Paginator correspond au générateur de requêtes et à la méthode simplePaginate d'Eloquent, tandis que lengthAwarePaginator est équivalent à la méthode paginate.

Cet article présente principalement en détail le code d'implémentation de la pagination personnalisée Laravel. Les amis intéressés peuvent s'y référer. J'espère qu'il pourra aider tout le monde.

Pour la pagination Laravel, il est livré avec une méthode paginate, qui est très utile, mais elle a aussi des limites.

J'ai donc écrit ma propre pagination pour cela. Le code spécifique est le suivant


<?php  
namespace ...;

use ...;
/**
 * 自定义分页类,适合少数据的查询,多数据的时候不推荐
 * Class CustomPaginate
 * @package App\Tools\Paginate
 */
class CustomPaginate
{
  /**
   * 自定义数组分页
   * @param $data = 返回结果
   * @param $page
   * @param $limit
   * @return mixed
   */
  public static function paginate($data, $page = 1, $limit = 10)
  {
    if (!is_numeric($page) || !is_numeric($limit)) {
      return false;
    }
    $count = count($data);
    $data = array_slice($data, ($page - 1) * $limit, $limit);
    return new LengthAwarePaginator($data, $count, $limit, $page);
  }

  /**
   * 参数解释 对外暴露的方法
   * @param $data = array|collection 切记只支持这两种
   * @param $page = 当前页
   * @param $limit = 每一页展示几条
   * @return array|false
   * 返回结果为数组
   * 调用实例: CustomPaginate::paginateToArray($data, $request->page, $request->limit);
   */
  public static function paginateToArray($data, $page = 1, $limit = 10)
  {
    $isValidate = self::validate($data, $page, $limit);           //验证
    if ($isValidate === false) {
      return false;
    }

    $res = self::paginate($data, $page, $limit)->toArray();         //分页数据转换为数组

    //上一页 || 下一页 => path
      if ($res[&#39;prev_page_url&#39;] != null) {
        $prev_page = $page - 1;
        $res[&#39;prev_page_url&#39;] = Paginator::resolveCurrentPath() . "?page=" . $prev_page . "&limit=" . $limit;
      }
      if ($res[&#39;next_page_url&#39;] != null) {
        $next_page = $page + 1;
        $res[&#39;next_page_url&#39;] = Paginator::resolveCurrentPath() . "?page=" . $next_page . "&limit=" . $limit;
      }
    return $res;
  }

  /**
   * 验证参数是否合法
   */
  public static function validate(&$data, &$page = 1, &$limit = 10)
  {
    $page = empty($page) ? 1 : $page;
    $limit = empty($limit) ? 10 : $limit;
    if (!is_array($data) && !$data instanceof Collection) {
      return false;//"自定义分页方法只支持数组数据和集合数据";
    }
    if (!is_numeric($page) || !is_numeric($limit)) {
      return false;//"page limit 参数只支持数字";
    }
    if ($data instanceof Collection) {
      return $data = $data->toArray();
    }
    return $data;
  }

}
Copier après la connexion

Recommandations associées :

Laravel utilise le plug-in Pagination pour implémenter une pagination personnalisée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal