>  기사  >  백엔드 개발  >  laravel 사용자 정의 페이징 효과 예제에 대한 자세한 설명

laravel 사용자 정의 페이징 효과 예제에 대한 자세한 설명

小云云
小云云원래의
2018-02-03 10:19:081316검색

Laravel의 페이지 매김은 매우 편리하며 실제로 확장하기가 매우 쉽습니다. 아래 예를 들어 paginate() 및 simplePaginate() 메서드를 확장하여 "이전 페이지" 및 " "다음 표시와 같은 사용자 정의 페이징 스타일을 구현해 보겠습니다. 물론 확장 방법을 익히면 특정 페이지로 점프하는 등 원하는 페이징을 무작정 확장할 수 있고, 페이징에는 총 몇 개의 레코드가 있는지 표시됩니다. 현재 표시된 레코드 범위는 어쩌고 저쩌고입니다. . .

5.1과 5.2는 같은 방법이어야 합니다. 여기서는 5.2 버전을 사용하고 있습니다. 문서에서는 Paginator가 쿼리 빌더 및 Eloquent의 simplePaginate 메소드에 해당하는 반면 LengthAwarePaginator는 paginate 메소드에 해당한다고 알려줍니다.

이 글은 주로 laravel 사용자 정의 페이징 구현 코드를 자세히 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

laravel 페이지 매김에는 페이지 매김 방법이 제공되는데 이는 매우 유용하지만 한계도 있습니다.

그래서 이에 대한 페이징을 직접 작성했습니다. 구체적인 코드는 다음과 같습니다


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

}

관련 권장 사항:

Laravel은 Pagination 플러그인을 사용하여 사용자 정의 페이징을 구현합니다

위 내용은 laravel 사용자 정의 페이징 효과 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.