Admin

Published il y a 8 mois,26 jours

 

Rien que ca, comme un dieu !

Aujourd'hui un petit rapport d'expérience sur nos amis les filtres, assez peu connus des développeurs symfony car ne faisant quasiment pas parti du fameux tutoriel de reférence : Jobeet.

Du coup, on ne les utilise pas car on ne sait finalement pas à quoi ca sert.

A quoi ca sert

Commencons par expliquer le concept des filtres symfony. Si vous avez déjà générer un module d'administration (doctrine:generate-admin ModelName), vous devez avoir une petite idée de son intérêt. Il sont destinés à faire des recherches sur le modèle en question.

Ils sont vraiment similaire aux formulaires relatifs aux même objet à l'exception qu'il ont un rendu différent pour permettre une recherche cohérente (on ne cherche pas une date en général mais plutot une date entre 2 dates) ET qu'ils ont un traitement du formulaire spéifique.

En effet, et c'est plutôt logique, on ne souhaite pas enregistrer un objet en base de données. On souhaite chercher les objets qui ont les caractéristiques recherchées.

Aussi Voici comment on traite un formulaire.

Traiter un filtre

Si l'on utilise un filtre, on va avoir un vue particulière avec des champs nous permettant de faire des recherches pour chaque attribut de l'objet (prénom, nom etc...) le fait de remplir le filtre aura pour effet de filtrer les résultats affichés.

Lorsque l'on valide le filtre et donc que l'on soumet le formulaire, nous allons instancier un nouveau objet filtre et lui attacher les données postées par formulaire. Ensuite, si le formulaire est valide (on peut le savoir comme pour un formulaire standard, if($filterForm->isValid()), nous allons non pas appeler la méthode $filterForm->save() qui n'éxiste pas mais bel et  bien la méthode buildQuery($filterForm->getVales()) qui va construire la requete à exécuter et la renvoyer. 

Ainsi, on peut utiliser cette requete directement en l'exécutant avec la méthode execute() ou alors en la mettant dans un sfDoctrinePager, que je conseille grandement.

Créer un filtre personnalisé

Dans le cas ou l'on veut ajouter un filtre personnalisé à un objet, vous pouvez suivre ce tutoriel que j'avais déjà écris auparavant et qui vous montre dans un petit exemple comment rechercher des voitures dont la marque est de telle nationalité.

 

Problèmes rencontrés

J'ai rencontré quelques petits problèmes au niveau de la gestion des filtres. Je voulais rechercher un utilisateur par nom et prénom. J'ai créé un nouveau simpletSfGuardFormFilter qui étandait de sfGuardUserFormFilter et j'ai dit au formulaire de n'utiliser que les champs first_name et last_name

 

 

 


Add a comment :

 

Votre email ne sera jamais publié

Doit débuter par http:// ou https://