Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Beispiels für einen benutzerdefinierten Laravel-Paging-Effekt

Detaillierte Erläuterung des Beispiels für einen benutzerdefinierten Laravel-Paging-Effekt

小云云
小云云Original
2018-02-03 10:19:081353Durchsuche

Die Paginierung von Laravel ist sehr praktisch und lässt sich tatsächlich ganz einfach erweitern. Lassen Sie uns unten ein Beispiel erstellen und die Methoden paginate() und simplePaginate() erweitern, um unseren benutzerdefinierten Paginierungsstil zu implementieren, z. B. die Anzeige von „vorherige Seite“ und „. Nächste Seite“ anstelle von „““ und „““. Wenn Sie die Erweiterungsmethode beherrschen, können Sie natürlich eine gewünschte Paginierung skrupellos erweitern, z. B. indem Sie zu einer bestimmten Seite springen und die Gesamtzahl der Datensätze in der Paginierung anzeigen. , der aktuell angezeigte Datensatzbereich usw. . .

5.1 und 5.2 sollten die gleiche Methode sein. Ich verwende hier Version 5.2. Aus der Dokumentation geht hervor, dass Paginator dem Abfrage-Builder und der simplePaginate-Methode von Eloquent entspricht, während LengthAwarePaginator der Paginate-Methode entspricht.

Dieser Artikel stellt hauptsächlich den benutzerdefinierten Paging-Implementierungscode im Detail vor. Interessierte Freunde können darauf verweisen.

Für die Laravel-Paginierung gibt es eine Paginierungsmethode, die sehr nützlich ist, aber auch Einschränkungen aufweist.

Also habe ich meine eigene Seite dafür geschrieben. Der spezifische Code lautet wie folgt


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

}

Verwandte Empfehlungen:

Laravel verwendet das Pagination-Plug-in, um benutzerdefiniertes Paging zu implementieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispiels für einen benutzerdefinierten Laravel-Paging-Effekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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