J'utilise Eloquent avec la classe de pagination de Laravel 4).
Problème: Lorsqu'il y a des paramètres GET dans l'URL, par exemple: http://site.com/users?gender=female&body=hot
, Les liens de pagination générés ne contiennent que le paramètre page
et rien d'autre.
Modèle de lame
{{ $users->link() }}
Il y a une fonction ->append()
pour cela, mais quand on ne sait pas combien de paramètres GET sont là, comment pouvons-nous utiliser append()
pour inclure les autres paramètres GET dans les liens paginés sans un morceau entier de code if
fâchant notre modèle de lame?
EDIT: Le commentaire de Connor avec la réponse de Mehdi est nécessaire pour que cela fonctionne. Merci aux deux pour leurs clarifications.
->appends()
peut accepter un tableau en tant que paramètre, vous pouvez passer Input::except('page')
, cela devrait suffire.
Exemple:
return view('manage/users', [
'users' => $users->appends(Input::except('page'))
]);
Je pense que vous devriez utiliser ce code dans Laravel 5. Cela fonctionnera également avec le paramètre page
mais également avec tout autre paramètre:
$users->appends(request()->input())->links();
Personnellement, j'essaie d'éviter d'utiliser Facades
autant que possible. Utiliser des fonctions d'assistance globales est moins codé et beaucoup plus élégant.
Savoir de la Input::all()
, il inclura les valeurs ?page=
précédentes encore et encore dans chaque page que vous ouvrez!
Par exemple, si vous êtes dans ?page=1
et que vous ouvrez la page suivante, cela ouvrira ?page=1&page=2
La dernière page prise sera la page que vous voyez! pas la page que vous voulez voir
Solution: utilisez Input::except(array('page'))
Pas append()
mais appends()
Donc, la bonne réponse est:
{!! $records->appends(Input::except('page'))->links() !!}
Vous pourriez utiliser
->appends(request()->query())
Exemple dans le contrôleur:
$users = User::search()->order()->with('type:id,name')
->paginate(30)
->appends(request()->query());
return view('users.index', compact('users'));
Exemple dans la vue:
{{ $users->appends(request()->query())->links() }}
LARAVEL 5
La vue doit contenir quelque chose comme:
{!! $myItems->appends(Input::except('page'))->render() !!}
Utilisez cette construction pour conserver tous les paramètres d’entrée sauf les pages.
{!! $myItems->appends(Request::capture()->except('page'))->render() !!}
Pourquoi?
1) vous dépouillez tout ce qui a été ajouté pour demander comme ça
$request->request->add(['variable' => 123]);
2) vous n'avez pas besoin de $ request comme paramètre d'entrée pour la fonction
3) vous excluez "page"
PS) et cela fonctionne pour Laravel 5.1
Inclure ceci dans votre page de vue
$users->appends(Input::except('page'))
pour qui on laravel 5.3 en lame:
{{ $table->appends(['id' => $something ])->links() }}
vous pouvez obtenir l'élément passé avec
$passed_item=$request->id;
tester avec
dd($passed_item);
vous devez obtenir quelque chose de valeur
Passez également le numéro de page pour la pagination. Quelque chose comme ça
$currentPg = Input::get('page') ? Input::get('page') : '1';
$boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });