J’utilise Eloquent avec le cours de Pagination de Laravel 4.
Problème: Lorsque l’URL contient des parameters GET, par exemple: http://site.com/users?gender=female&body=hot
, les liens de pagination créés contiennent uniquement le paramètre de la 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 parameters GET il y a, comment peut-on utiliser append()
pour inclure les autres parameters GET dans les liens paginés sans tout un morceau de if
code gâcher 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 comme paramètre, vous pourriez passer Input::except('page')
, cela devrait faire l’affaire.
Exemple:
return view('manage/users', [ 'users' => $users->appends(Input::except('page')) ]);
Je pense que vous devriez utiliser ce code dans Laravel 5 dont Laracasts le mentionne. En outre, cela fonctionnera non seulement avec la page
parameters mais également avec tout autre paramètre:
$users->appends(request()->input())->links();
Personnellement, j’essaie d’éviter d’utiliser Fecades
autant que possible. L’utilisation des fonctions d’assistance globales est moins codée et beaucoup plus élégante.
Soyez conscient de la valeur Input::all()
, elle inclura encore et encore les valeurs ?page=
précédentes dans chaque page que vous ouvrez!
Par exemple, si vous êtes dans ?page=1
et que vous ouvrez la page suivante, celle-ci s’ouvrira ?page=1&page=2
La dernière page de valeur sera donc la page que vous voyez! pas la page que vous voulez voir
Solution: utilisez Input::except(array('page'))
Non append()
mais appends()
Donc, la bonne réponse est:
{!! $records->appends(Input::except('page'))->links() !!}
LARAVEL 5
La vue doit contenir quelque chose comme:
{!! $myItems->appends(Input::except('page'))->render() !!}
Utilisez cette construction pour conserver tous les parameters d’entrée, mais la page
{!! $myItems->appends(Request::capture()->except('page'))->render() !!}
Pourquoi?
1) vous supprimez tout ce qui a ajouté à la demande 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 ça marche pour Laravel 5.1
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() }}
Inclure ceci dans votre page de vue
$users->appends(Input::except('page'))
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); });
pour qui on en laravel 5.3 en lame:
{{ $table->appends(['id' => $something ])->links() }}
vous pouvez obtenir l’article passé avec
$passed_item=$request->id;
le tester avec
dd($passed_item);
vous devez obtenir une valeur de $