michaloravec / laravel-paginateroute
Laravel的外部扩展,可以轻松使用Laravel的分页器而不需要查询字符串
Requires
- php: >=5.4.0
Requires (Dev)
- illuminate/contracts: ~5.4.0
- illuminate/routing: ~5.4.0
- illuminate/translation: ~5.4.0
- orchestra/testbench: ^3.4
- phpunit/phpunit: ^5.0
This package is auto-updated.
Last update: 2024-09-17 11:27:22 UTC
README
此包受原始Laravel Paginate Route的启发。
此包添加了paginate
路由方法,支持通过自定义路由进行分页,而不是查询字符串。这也使得分页路由的翻译变得容易,例如(普通)/news/page/2
、/novinky/stranka/2
或(破折号)/news/page-2
、/novinky/stranka-2
。还可以从URL中删除“page”一词,例如(简单)/news/2
安装
通过Composer
$ composer require michaloravec/laravel-paginateroute
该包将自动注册自己。
您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider=MichalOravec\PaginateRoute\PaginateRouteServiceProvider --tag="config"
这是发布配置文件的内容
<?php return [ /* |-------------------------------------------------------------------------- | Paginate Mode |-------------------------------------------------------------------------- | | This option controls the default mode that will be used to paginate | route for your application. By default, the normal mode is used; | however, you remain free to modify this option if you wish. | | Supported: "normal", "dash", "simple" | */ 'mode' => 'normal', ];
然后在App\Providers\RouteServiceProvider::boot()
中注册宏。
// app/Providers/RouteServiceProvider.php use PaginateRoute; // ... public function boot() { PaginateRoute::registerMacros(); parent::boot(); }
使用方法
paginate
路由宏将为您注册两个路由。
// app/Http/routes.php // Generates /users & /users/page/{page} Route::paginate('users', 'UsersController@index');
在路由的动作中,您可以直接使用Laravel的常规分页方法。
// app/Http/Controllers/UsersController.php public function index() { return view('users.index', ['users' => \App\User::simplePaginate(5)]); }
如果您想自定义或添加对“page”URL段的翻译,可以发布语言文件。
$ php artisan vendor:publish --provider="MichalOravec\PaginateRoute\PaginateRouteServiceProvider" --tag="lang"
生成URL
由于Laravel的分页器URL仍然会使用查询字符串,因此PaginateRoute有它自己的URL生成器和页面辅助函数。
{{-- $users is an instance of \Illuminate\Contracts\Pagination\Paginator --}}
@if (PaginateRoute::hasPreviousPage())
<a href="{{ PaginateRoute::previousPageUrl() }}">Previous</a>
@endif
@if (PaginateRoute::hasNextPage($users))
<a href="{{ PaginateRoute::nextPageUrl($users) }}">Next</a>
@endif
nextPage
函数需要分页器实例作为参数,这样它们可以确定是否有更多记录。
/** * @param \Illuminate\Contracts\Pagination\Paginator $paginator * @return int|null */ public function nextPage(Paginator $paginator)
/** * @param \Illuminate\Contracts\Pagination\Paginator $paginator * @return bool */ public function hasNextPage(Paginator $paginator)
/** * @param \Illuminate\Contracts\Pagination\Paginator $paginator * @return string|null */ public function nextPageUrl(Paginator $paginator)
/** * @return int|null */ public function previousPage()
/** * @return bool */ public function hasPreviousPage()
/** * @param bool $full * @return string|null */ public function previousPageUrl($full = false)
/** * @param int $page * @param bool $full * @return string */ public function pageUrl($page, $full = false)
如果$full
为true,则第一页将是一个完全限定的URL。例如,/users/page/1
而不是仅仅/users
(这是默认值)。
要获取不是当前路由的分页路由的特定页面的URL,可以使用addPageQuery
函数。
/** * @param string $url * @param int $page * @param bool $full * @return string */ public function addPageQuery($url, $page, $full = false)
您还可以获取包含所有可用URL的数组。这些可以作为带有页码的纯HTML列表进行渲染。请注意,这些函数需要一个LengthAwarePaginator
。
/** * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator * @param bool $full * @return array */ public function allUrls(LengthAwarePaginator $paginator, $full = false)
/** * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator * @param bool $full * @param string $class * @param bool $additionalLinks * @return string */ public function renderPageList(LengthAwarePaginator $paginator, $full = false, $class = null, $additionalLinks = false)
<!-- Example output: --> <ul class="pagination"> <li><a href="http://example.com/news">1</a></li> <li><a href="http://example.com/news/page/2">2</a></li> <li class="active"><a href="http://example.com/news/page/3">3</a></li> <li><a href="http://example.com/news/page/4">4</a></li> <li><a href="http://example.com/news/page/4">»</a></li> </ul>
您还可以生成标记上一页和下一页的链接标签,以利于SEO。请注意,这些函数需要一个LengthAwarePaginator
。
/** * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator * @param bool $full * @return string */ public function renderRelLinks(LengthAwarePaginator $paginator, $full = false)
<!-- Example output: --> <link rel="prev" href="http://example.com/news/page/2"> <link rel="next" href="http://example.com/news/page/4">
测试
该包包含一些使用Orchestra设置的集成/冒烟测试,可以通过phpunit运行这些测试。
$ phpunit
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
安全性
如果您发现任何安全问题,请通过电子邮件michal.oravec@outlook.com报告,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。