web-dev-qa-db-fra.com

Laravel Liens de pagination n'incluant pas d'autres paramètres GET

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?

81
Nyxynyx

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'))
]);
105
Alexandre Danault

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.

69
Hassan Azimi

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'))

39
Mehdi Maghrooni

Pas append() mais appends() Donc, la bonne réponse est:

{!! $records->appends(Input::except('page'))->links() !!}
28
Bald

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() }}
22

LARAVEL 5

La vue doit contenir quelque chose comme:

{!! $myItems->appends(Input::except('page'))->render() !!}

11
ecairol

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

5
Yevgeniy Afanasyev

Inclure ceci dans votre page de vue

 $users->appends(Input::except('page'))
3
Siva Ganesh

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

2
Mostafa Asadi

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); });
0
Cengkuru Michael