2013-08-08 2 views
1

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?

Répondre

5

Je n'utiliserais jamais la requête POST pour effectuer un filtrage/tri/recherche !!! En général, si l'utilisateur essaie de recharger la page (page de résultats de recherche) à laquelle des données (paramètres de recherche) ont été envoyées, le navigateur demande s'il doit recharger et renvoyer ces données à nouveau. Je ne dois pas dire, c'est ennuyeux, au moins.

Solution: respectez la méthode Laravel et utilisez appends() malgré le fait qu'il génère une URL «moche» - c'est une solution courante, quel que soit le cadre.

+1

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 :) –

+0

Oui, c'est la solution aussi. De cette façon, vous pouvez découvrir ce que les utilisateurs recherchent, etc. – Andreyco

+0

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. –