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.
in routes\web.php
bei z.B. folgender Route
<span style="font-size: 14.4px;">Route::get('topic/{topic}', 'TopicController@index')->name('topic');</span><span style="font-size: .9rem;"><br /></span>
zusätzlich eine Zeile für die Pagination:
<span style="font-size: 14.4px;">Route::get('topic/{topic}/page/{page}', 'TopicController@index');
Route::get('topic/{topic}', 'TopicController@index');</span><span style="font-size: .9rem;"><br /></span>
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
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()))) !!}
({{pro_count}})
Beitrag bewerten:{{percentage}} % positiv
({{con_count}})