Laravel : Pretty Pagination URLs

Laravel verwendet für die Pagination URL Out of the box GET-Variablen: ?page=1. Damit aus ?page=1 sowas wie /page/1 wird, konnte ich seitens Laravel keine Lösung finden. Damit ich bei zukünftigen Updates möglichst wenig Probleme habe, verwende ich die Laravel-Pagination mit einer minimalen Übersteuerung: Mit einer zusätzlichen Route, einer Variable die aus der Route die Seitennummer übersteuert und in den Blade-Templates String-Replaces die die Standard-Funktion für das Rendern entsprechend anpassen.  

ZjZgAu27GykP3l1sYDbxySU3p9VbkMyRew65WJe5.png

in routes\web.php

bei z.B. folgender Route 

Route::get('topic/{topic}', 'TopicController@index')->name('topic');

zusätzlich eine Zeile für die Pagination:

Route::get('topic/{topic}/page/{page}', 'TopicController@index');
Route::get('topic/{topic}', 'TopicController@index');

Im Controller

    public function show($slug,$page=1)
    {   //Set the current page:
        \Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
        return $page;
        });
        ...

Ab diesem Zeitpunkt können zusätzliche Seiten bereits über die neuen Links aufgerufen werden:

/page/2

Links in den Blade Templates

4hhSEqwHrt6oTwNoGowJLoOdwcKmIttxhoZ7no7K.png

In den Blade-Templates können die Links dann wie folgt angepasst werden:

{!! str_replace("?page=", "/page/",preg_replace("@/page/([0-9]+)@","",str_replace("?page=1\"", "\"",$stories->render()))) !!}	
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 31.03.2020 von Bernhard
geändert am 27.05.2020 von Bernhard



Fragen / Kommentare


Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.