J'ai du mal à conserver mes paramètres de recherche lorsque je clique sur un lien de pagination. Par exemple, si une requête de recherche renvoie 40 enregistrements et que j'ai deux pages, un clic sur la deuxième page renvoie la deuxième page de l'ensemble des enregistrements au lieu des 40 qui ont été renvoyés par la recherche.Pagination Laravel avec paramètres de recherche
Voici le postIndex()
de mon contrôleur:
public function postIndex(){
$validator = Validator::make(
Input::all(),
array('priceMin' => array('numeric'),
'priceMax' => array('numeric')
)
);
if ($validator->fails()){
return Redirect::to('items')->withInput()->withErrors($validator);
} else {
return Redirect::to('items')->withInput();
}
}
Et mon getIndex()
:
public function getIndex(){
$items= $this->retriever->getListings(Input::old(), 20);
return View::make('listings', array('items' => $items);
}
L'objet retriever
boucles puis à travers l'ancienne entrée et trouve tous les paramètres de recherche valides, les requêtes de la base de données avec eux, et pagine avec la quantité spécifiée, 20 dans ce cas.
J'ai essayé d'utiliser ->appends()
mais les données ne sont pas Input::old()
et il en fait une terrible url s'il y a 10 paramètres de recherche car il utilise GET
et non POST
. Comment puis-je appliquer mes paramètres aux liens de pagination?
Vous pouvez également enregistrer les paramètres de recherche dans votre base de données et utiliser uniquement l'ID de recherche et la page dans l'URL. Plus de travail mais propre :) –
Oui, c'est la solution aussi. De cette façon, vous pouvez découvrir ce que les utilisateurs recherchent, etc. – Andreyco
Yup, c'est quelque chose que j'ai fait récemment, comme je le faisais initialement comme vous. Cependant, je ne sauvegarde pas les requêtes de recherche. Je vais probablement le mettre en œuvre bientôt. –