PHPackages                             prepr/laravel-pretty-pagination - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. prepr/laravel-pretty-pagination

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

prepr/laravel-pretty-pagination
===============================

Laravel SEO friendly pagination routing.

063PHP

Since Jul 19Pushed 2y ago1 watchersCompare

[ Source](https://github.com/Prepr/laravel-pretty-pagination)[ Packagist](https://packagist.org/packages/prepr/laravel-pretty-pagination)[ RSS](/packages/prepr-laravel-pretty-pagination/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Laravel 6.*|7.*|8.\* : Laravel Pretty Pagination
================================================

[](#laravel-678--laravel-pretty-pagination)

This package adds the `paginate` route method to support pagination via custom routes instead of query strings. This also allows for easily translatable pagination routes ex. `/news/page/2`, `/nieuws/pagina/2`.

Install
-------

[](#install)

Via Composer

```
composer require prepr/laravel-pretty-pagination
```

First register the service provider and facade in your application.

```
// config/app.php

'providers' => [
    ...
    'Prepr\PaginateRoute\PaginateRouteServiceProvider',
];

'aliases' => [
    ...
    'PaginateRoute' => 'Prepr\PaginateRoute\PaginateRouteFacade',
];
```

Then register the macros in `App\Providers\RouteServiceProvider::boot()`.

```
// app/Providers/RouteServiceProvider.php

use Prepr\PaginateRoute\PaginateRouteFacade as PaginateRoute;

// ...

public function boot()
{
    PaginateRoute::registerMacros(); // Add this line

    parent::boot();
}
```

Usage
-----

[](#usage)

The `paginate` route macro will register two routes for you.

```
// app/Http/routes.php

// Generates /users & /users/page/{page}
Route::paginate('users', 'UsersController@index');
```

In your route's action you can just use Laravel's regular pagination methods.

```
// app/Http/Controllers/UsersController.php

public function index()
{
    return view('users.index', ['users' => \App\User::simplePaginate(5)]);
}
```

If you want to customize or add translations for the "page" url segment, you can publish the language files.

```
php artisan vendor:publish --provider="Prepr\PaginateRoute\PaginateRouteServiceProvider"
```

### Generating Url's

[](#generating-urls)

Since Laravel's paginator url's will still use a query string, PaginateRoute has it's own url generator and page helper functions.

```

@if(PaginateRoute::hasPreviousPage())
  Previous
@endif

@if(PaginateRoute::hasNextPage($users))
  Next
@endif

```

The `nextPage` functions require the paginator instance as a parameter, so they can determine whether there are any more records.

```
/**
 * @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)
```

If `$full` is true, the first page will be a fully qualified url. Ex. `/users/page/1` instead if just `/users` (this is the default).

To retrieve the url of a specific page of a paginated route, that isn't the current route, there's the `addPageQuery` function.

```
/**
 * @param string $url
 * @param int $page
 * @param bool $full
 * @return string
 */
public function addPageQuery($url, $page, $full = false)
```

You can also retrieve an array with all available urls. These can be rendered as a plain html list with page numbers. Note that these functions require a `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 : {!! PaginateRoute::renderPageList($items,true,'pagination',true) !!}
 */

    1
    2
    3
    4
    &raquo;

```

You can render link tags to mark previous and next page for SEO. Note that these functions require a `LengthAwarePaginator`.

```
/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @return string
 */
public function renderRelLinks(LengthAwarePaginator $paginator, $full = false)
```

```

```

Tests
-----

[](#tests)

The package contains some integration/smoke tests, set up with Orchestra. The tests can be run via phpunit.

```
$ phpunit

```

Comming Soon
------------

[](#comming-soon)

- Bootstrap 4.\* supported pagination rendering.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security
--------

[](#security)

If you discover any security related issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- [Sebastian De Deyne](https://github.com/sebastiandedeyne)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

15

—

LowBetter than 3% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity21

Early-stage or recently created project

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/6772ed6f5c90ea6b5f14845c488bf8fc1a3d85da9eacd4bf97840d404c6c62cb?d=identicon)[preprdeveloper](/maintainers/preprdeveloper)

---

Top Contributors

[![hemarao18](https://avatars.githubusercontent.com/u/139971529?v=4)](https://github.com/hemarao18 "hemarao18 (1 commits)")[![Preprlabs](https://avatars.githubusercontent.com/u/139971529?v=4)](https://github.com/Preprlabs "Preprlabs (1 commits)")[![preprlabsdev](https://avatars.githubusercontent.com/u/139980034?v=4)](https://github.com/preprlabsdev "preprlabsdev (1 commits)")

### Embed Badge

![Health badge](/badges/prepr-laravel-pretty-pagination/health.svg)

```
[![Health](https://phpackages.com/badges/prepr-laravel-pretty-pagination/health.svg)](https://phpackages.com/packages/prepr-laravel-pretty-pagination)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
