Bonjour,
j'ai créé un filtre sur un seul champ simple, il liste des users je voudrais que quand j'édite un user et que je retourne à cette liste, le filtre reste en place.
Comment faire?
Merci de votre aide
Bonjour,
j'ai créé un filtre sur un seul champ simple, il liste des users je voudrais que quand j'édite un user et que je retourne à cette liste, le filtre reste en place.
Comment faire?
Merci de votre aide
Tu pourrais regarder comment fonctionnaient les filtres dans symfony 1.x.
Dans un admin-generator, les filtres de type formFilter étaient chargés et possédaient le comportement que tu décris. Si je me souviens bien on utilisait la session pour stocker les critères de filtre, tout simplement.
Le fonctionnement global était le suivant :
Premier chargement de page : on check si ce filtre existe déja en session, comme ce n'est pas le cas, un nouveau formulaire de type filtre est chargé et tous les résultats sont affichés.
Lorsqu'on le submit, les critères sont enregistrés en session et on recharge la page en faisant une requête par rapport à la session.
Chaque fois qu'on voudra retourner sur la page, on utilisera les critères de la session, tant que le filtre n'aura pas été réinitialisé. (attention il faut bien penser à re-remplir le form et pas uniquement faire la requête sur les résultats : sinon tu obtiens un form de filtre vierge et un résultat filtré : ce qui est déroutant).
Enfin, tu flush ta session en utilisant un bouton "effacer filtres".
Voilà comment ça fonctionnait : je ne sais pas s'il y a des manières plus récentes ou plus propres de faire mais c'est celle que je te suggère.
J'ai aussi fait du Symfony 1.4 et effectivement les filtres était gardé en session. C'était automatique et ça à l'air bien plus compliqué dans sf2 ...
Ce n'est pas plus compliqué, juste pas inclus. Il faut regarder du coté du bundle SonataAdmin
Bonjour,
le mécanisme de mise en session des filtres n'a pas été repris dans le sonata admin bundle.
à la place les formulaire de filtres sont transmis en get, ce qui est une façon assez naturelle de faire lorsque l'on veut revenir à une vue donnée.
Dans le détail, Sonata doit gérer lui-même les redirections vers la liste des entités.
Si en plus tu n'as qu'un filtre à appliquer, je te conseillerais cette méthode:
1 - filtrer via un paramètre get afin d'avoir une url qui corresponde toujours à la même vue.
2 - dans le template de formulaire
3 - dans le controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <form> {{form_widget(form)}} {#si le formulaire a été soumis et était invalide#} {% if app.request.get('previous-url')%} <input type="hidden" name="previous-url" value="{{app.request.get('previous-url')}}"/> {%else%} {#si on on arrive depuis la page liste ex "ma/liste/?filter-name=toto" #} <input type="hidden" name="previous-url" value="{{app.request.headers.get('referer')}}"/> {%endif%} <button type="submit">valider</button> </form>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public function editAction(){ //..... if($form->isValid()){ //...persister l'entité $url=$request->get('previous-url');//la valeur a été transmise en même temps que le formulaire return new RedirectResponse($url); } //... }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager