camohub/paginator

Laravel 分页器

1.0.26 2021-07-12 10:07 UTC

README

Laravel 的路由分页器或基于路由的分页器:)

本包解决了原生 Laravel 分页器生成带有查询字符串参数的 URL 的问题。

https://example.com/category?page=4

本包允许您根据路由模式创建带有分页参数的美丽 URL。

https://example.com/category/4
# with fallback to
https://example.com/category?page=4

安装

composer install camohub/paginator

示例

让我们想象一个带有路由的文章控制器

Route::get('/{categorySlug}/{page?}', 'ArticleController@index')->name('articles');

index 动作显示所需分类中的所有文章。

public function index(Request $request, $categorySlug, $page = 1)
{
    $category = Category::where('slug', $categorySlug)->first()
    
    if( ! $category ) abort(404);
    
    $paginator = new Paginator($request, $category->articles(), 'articles', ['categorySlug' => $categorySlug]);

    $view = [
        'articles' => $paginator->getItems(),
        'paginator' => $paginator,
        'category' => $category,
    ];

    return view('articles.index', $view);
}

Paginator __construct() 方法期望第二个参数为查询构建器,可以调用 skip() 和 take() 方法来分页集合。

内部实现看起来像

$this->items = $this->model->skip($this->skip)->take($this->perPage)->get();

视图将看起来像

@foreach( $articles as $a ) 
... 
@endforeach 

{{$paginator->render()}}

选项

Paginator 需要三个非可选参数。

  1. 请求对象
  2. 查询构建器/模型
  3. 路由名称

此外,还有一些可选参数可用于配置分页器。

  1. 路由参数 - 没有分页参数的路由参数。页码参数将合并到模板中。默认是 []。
  2. pageParam - 表示页码的路由参数名称。默认是 "page"。包将查找 $request->route()->parameter($pageParam)$request->query($pageParam)
  3. perPage - 每页项目数。默认是 15。
  4. sideItemsCount - 分页器中当前页周围的项目数。它与 Laravel 原生的 ->onEachSide() 分页器方法等效。默认是 3。

您可以通过简单的 MyPaginator extends Paginator 来覆盖整个分页器,也可以发布模板文件并重写它。当前模板基于 Bootstrap 4。

##简单分页器

$paginator = new Paginator($request, $category->articles(), 'articles', ['categorySlug' => $categorySlug]);