spatie/laravel-paginateroute

此包已被放弃,不再维护。未建议替代包。

Laravel 扩展包,可轻松使用 laravel 的分页器而无需查询字符串

2.7.0 2018-07-02 07:35 UTC

README

🚨 此包已被放弃 🚨

我们不再在我们的项目中使用此包,也无法证明维护它所需的时间。因此,我们决定放弃它。欢迎您克隆我们的代码并维护您自己的副本。

Laravel Paginate Route

Latest Version on Packagist Software License Build Status Quality Score StyleCI Total Downloads

此包添加了 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)]);
}

如果您想自定义或添加对 "page" 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

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">&raquo;</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)

更新日志

请参阅更新日志获取更多最近更改的信息。

贡献

请参阅贡献指南获取详细信息。

安全

如果您发现任何安全相关的问题,请发送电子邮件至freek@spatie.be,而不是使用问题跟踪器。

鸣谢

关于Spatie

Spatie 是一家位于比利时的安特卫普网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里

许可

MIT许可证(MIT)。请参阅许可文件获取更多信息。