|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 157 ![]() |
Bonjour à tous,
Dans un module d'administration créé à l'aide de la commande doctrine:generate-admin, je dispose d'une liste d'objets que je peux filtrer. Dans mon cas (simplifié), je veux filtrer des Personnes en fonction de leurs Familles. Chaque Personne appartient à une et une seule Famille. Dans le modèle physique de données, cela se traduit par une clé étrangère famille_id dans la table Personne faisant référence à la table Famille. Par défaut, voici le widget et le validateur de filtre créés par Symfony : Code :
J'ai essayé bêtement de remplacer par des choses comme new sfWidgetFormFilterInput(array('with_empty' => false)) et new sfValidatorPass(array('required' => false)), mais ça n'a pas fonctionné : Code :
Merci. |
||||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() |
Alors on ne touche surtout pas au fichier Base....FromFilter.class.php.
Les seuls fichiers que tu dois modifier sont les ...FromFilter.class.php qui sont dans lib/filter/doctrine et uniquement ceux là. Pour les modifier c'est pour les forms standard. Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 157 ![]() |
Salut,
Ok. Pour les classes mères qui commencent par "Base...", je savais. J'ai fait un raccourci dans mon message. Mais c'est toujours utile de le rappeler. En revanche, je ne comprends pas comment résoudre mon problème à partir de ton exemple. |
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() |
tu écris ça :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 157 ![]() |
kenny.kev,
J'apprécie tes efforts pour me répondre. Mais il semble que ta dernière réponse soit un peu trop lapidaire pour être courtoise. Si je t'insupporte, tu n'es pas obligé de me venir en aide. Merci. Peux-tu donner un lien lorsque tu parles de doc symfony ? Sans être expert, (loin de là !), je ne suis pas totalement ignare : j'ai cherché et ai trouvé ça : Code :
sfWidgetFormFilterInput represents an HTML input tag used for filtering text.
Donc, dans un premier temps : pourquoi ne pas utiliser les classes de widgets et validateurs pour formulaires de filtres mais utiliser celles de formulaires tout court ? Je ne dis pas que tu as tort, je me pose juste la question. Dans un second temps : ta suggestion ne résout pas mon problème, exposé en détail dans mon premier message. Il ne s'agit pas de filtrer le champ famille.id mais le champ famille.famille_nom. Et ce à partir de la liste du module Personne. Tout en sachant que la table Personne fait référence au champ famille.id à l'aide d'une clé étrangère personne.famille_id. Bref, par défaut, avec ta solution, l'utilisateur est obligé de rentrer un id (entier naturel). Rentrer un nom de famille (texte) ne donne rien. |
|
|
00
|
|
|
#6 | ||||
|
Futur Membre du Club
![]() Inscription : août 2009 Messages : 24 ![]() |
En effet, dans la partie form filter, il faut bien utiliser des "sfWidgetFormFilterInput" par exemple, et non des "sfWidgetFormInput"
Quoi qu'il en soit, tu as deux problématiques: 1 - remplacer ton select par un input text 2 - faire en sorte que l'utilisateur tape un nom, et pas un id D'une part, entre parenthèse, je te conseillerais peut-être d'utiliser un sfWidgetFormJQueryAutocompleter (disponible dans les plugins de Symfo). Il s'agit d'une zone de texte qui sort en Ajax les valeurs de ta table (un autocompleter quoi). C'est simple, rapide et efficace. Si tu souhaites tout de même passer par un input simple, il te faudra: - pour le 1), remplacer ton widget choice dans ton FormFilter: Code :
Code :
|
||||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() |
kéraunos,
Je m'excuse pour mon impolitesse. Ça ne me soûle pas de te répondre. Alors quelque soit le coté (l'admin-generator ou bien le front) toutes les règles s'applique pour les 2. Voici le lien http://www.symfony-project.org/jobee...Doctrine/en/10. En revanche oui mon exemple est faux car il faut bien ...FromFilterInput() pour l'admin-generator. J'aurais du aussi te donnée l'indication qu'il fallait faire un validateur particulier qui lui cherchera le id correspondant au nom sinon retourne une erreur. ufretin à aussi proposé une solution assez pratique, bien entendu si tu utilise Prototype et non jQuery tu as la meme classe pour lui. Par contre si tu utilise une autre lib js, je ne sais pas. |
|
|
00
|
|
|
#8 | ||
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 157 ![]() |
Merci à vous deux pour vos réponses.
- Pour la 1ère problématique (remplacer le select par un input text) : L'objectif premier est seulement de changer le type de champ : avoir un champ texte dans lequel je puisse rentrer l'id d'une famille. Ok. Lorsque j'utilise le widget et le validator que tu proposes ufretin, cela ne fonctionne pas. Voici l'erreur (j'ai rentré 1, et la famille ayant l'id 1 existe bel et bien dans ma base) : Code :
En revanche, si je remplace Code :
$this->widgetSchema['famille_id'] = new sfWidgetFormFilterInput(array('with_empty' => false)); Code :
$this->widgetSchema['famille_id'] = new sfWidgetFormInput(); Ce qui semble aller dans le sens de ce que kenny.kev conseillait en premier lieu. Pourquoi l'utilisation de la classe sfWidgetFormFilterInput pose-t-elle problème ? - Pour la 2ème problématique (faire en sorte que l'utilisateur tape un nom au lieu d'un id) : J'utilise : - le widget sfWidgetFormInput() (cf. ci-dessus) - le validateur sfValidatorPass() (cf. message d'ufretin) - et la surcharge de filtre proposée par ufretin Or, le filtre prend toujours en compte l'id de la famille et pas le nom. Quand je rentre un nom, je n'ai aucun résultat. En fait, ufretin, où est le lien avec le champ famille.famille_nom dans ta solution ? Par exemple, si je veux que l'utilisateur tape une origine (je dis n'importe quoi, c'est pour illustrer), il faudrait alors filtrer en fonction du champ origine de la table famille, et pas en fonction du champ famille_nom, ni du champ id. Donc il faut bien que cette information apparaisse au moins une fois, non ? Ici, j'ai l'impression qu'on sélectionne les personnes dont le champ famille_id correspond à ce qu'a rentré l'utilisateur. Or, je veux qu'on sélectionne les personnes dont la clé étrangère famille_id renvoie à une famille qui a comme champ famille_nom ce qu'a rentré l'utilisateur. |
||
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() |
Pour le premier point tu as essayé sans mettre dans le sfWidgetFormFilterInput ? Normalement il faut rien.
Pour le 2ème point, voilà un lien qui devrais répondre à tes questions : http://www.e-glop.net/main/Petit_gui...ormExtraPlugin C'est du js au final, donc normalement tu peux ajouter tous les champs permettant de filtrer. |
|
|
00
|
|
|
#10 | ||||
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 157 ![]() |
En fait, j'ai trouvé une solution pour la 2ème problématique, dans la méthode surchargée (cf. message d'ufretin) :
Code :
Edit1 : kenny.kev : je vais essayer. Merci pour le lien, j'irai voir. Edit2 : Eh bien non ça ne fonctionne pas non plus sans l'option with_empty. Edit3 : Il y a même plus simple (pour la 2ème problématique) grâce à la puissance de Doctrine : Code :
|
||||
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
attention sfWidgetFormFilterInput renvoie un array alors que sfWidgetFormInput renvoie une variable.
Je me suis fait avoir. Si tu recherche mes post sur le site tu devrai trouver |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com