webakula / laravel-paginate-route
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
README
🚨 该软件包已被放弃 🚨
我们不再在我们自己的项目中使用此软件包,也无法证明维护它所需的时间。因此,我们选择放弃它。您可以随意复制我们的代码并维护自己的副本。
Laravel分页路由
此软件包添加了paginate
路由方法,通过自定义路由而不是查询字符串来支持分页。这也允许轻松实现可翻译的分页路由,例如/news/page/2
,/nieuws/pagina/2
。
Spatie是比利时安特卫普的一家网页设计公司。您可以在我们的网站上找到所有开源项目的概述在此。
注意:如果您正在升级到2.0,请查看下面的升级指南。
Postcardware
您可以自由使用此软件包(它是MIT许可的),但如果它进入您的生产环境,您需要从您家乡给我们寄一张明信片,注明您正在使用我们的哪个软件包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
我们将在网站上发布最好的明信片。
安装
通过Composer
$ composer require spatie/laravel-paginateroute
首先在您的应用程序中注册服务提供者和外观。
// config/app.php 'providers' => [ ... 'Spatie\PaginateRoute\PaginateRouteServiceProvider', ]; 'aliases' => [ ... 'PaginateRoute' => 'Spatie\PaginateRoute\PaginateRouteFacade', ];
然后在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)]); }
如果您想自定义或添加对“页面”URL段的翻译,可以发布语言文件。
$ php artisan vendor:publish --provider="Spatie\PaginateRoute\PaginateRouteServiceProvider"
生成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
下一个页面的函数需要一个分页器实例作为参数,以便确定是否有更多记录。
/** * @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
升级
1.x => 2.0
2.0版本将路由宏更改为仅注册一个包含整个查询的路由,因此不再可能为动作链接提供页面参数。
例如,action('FooController@bar', ['page' => 3])
不再可行,应替换为PaginateRoute::addPageQuery(action('FooController@bar'), 3)
。
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件 freek@spatie.be 反馈,而不是使用问题跟踪器。
致谢
关于Spatie
Spatie是比利时安特卫普的一家网页设计公司。您可以在我们的网站上找到所有开源项目的概述在此。
许可证
MIT许可证(MIT)。更多信息请参阅许可证文件。