Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 17h37   #1
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
Par défaut sfWidgetFormDoctrineJQueryAutocompleter et is_empty

bonjour,
j'aimerai savoir si dans un filtre générer par l'admin generator il y a moyen d'avoir le checkBox is_empty quand on a transformé le champ en sfWidgetFormDoctrineJQueryAutocompleter ?
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 17h50   #2
Membre habitué
 
Homme Ludovic
Étudiant
Inscription : janvier 2011
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 124
Points : 140
Points : 140
Essai d'ajouter l'option with_empty => true.
PeytaWodka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 09h25   #3
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
public function configure()
  {
    sfContext::getInstance()->getConfiguration()->loadHelpers(array('Url'));
 
    $this->widgetSchema['user_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
 
    $this->widgetSchema['user_id'] = new sfWidgetFormDoctrineJQueryAutocompleter(
      array(
        'with_empty'=> true,
        'model' => "sfGuardUser",
        'url'   => url_for("@ajax_username")
      ), array('size' => 25)
    );
  }
j'ai essayé aussi avec add_empty => true, mais j'ai le même message d'erreur:
Code :
1
2
500 | Internal Server Error | InvalidArgumentException
sfWidgetFormDoctrineJQueryAutocompleter does not support the following options: 'with_empty'.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h45   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Quel est l'intérêt de la ligne
Code :
$this->widgetSchema['user_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
placée là ?

Elle est normalement annulée par la suivante.

Regarde dans le code du widget, tu devrais y trouver des informations autour de la méthode __construct()
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h34   #5
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
aucune idée pour la ligne, elle y était dans l'exemple que j'ai trouvé.
Et si je me souvient bien, ça plante si elle n'y est pas.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h35   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Ce qui m'étonne c'est sa présence avant la création du widget. Dans mes souvenir le fait de déclarer un nouveau widget supprimait les options précédemment définies. Je suis manifestement dans l'erreur.

Pour revenir à la question d'origine, je ne pense pas que cela puisse marcher.

En effet, ton widget est un sfWidgetForm et pas un sfWidgetFormFilter. Il n'embarque donc aucun code pour générer la box.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 22h18   #7
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
arfeu, oui.
il existe un form filter qui ferait la même chose ?
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 09h40   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Dés que tu l'auras écrit et posté en plugin, il existera !

Non, à ma connaissance, il n'existe pas et Google ne m'a pas aidé sur le coup.

Et je n'ai pas réellement démonté de sfFormFilter... pour voir la différence, d'autant que le sfWidgetFormDoctrineJQueryAutocompleter n'est pas le widget le plus simple qui existe.

En fait, je me demande si tu n'aurais pas intérêt à utiliser un simple widget sfFormFilterInput que l'utilisateur y colle un bout du texte recherché pour trouver ses enregistrements, je ne vois pas trop l'absolue nécessité, dans un filtre, d'une sélection par liste, et si tu regardes les widgets filtre existant, sensio non plus ne semble pas y voir une chose importante.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 10h40   #9
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
effectivement, a bien y réfléchir, l'intérêt est minime.
En faites le but initial était de remplacer un select trop long qui plantait l'affichage (time excedeed).
Je pense remplacer ce champ par un input text, ça sera tout aussi bien.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 11h38   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 18h02   #11
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
arfeu sauf que c'est pas si simple de remplacer un select par un text.
Dois je créer un getter spécifique pour aller chercher via le nom la liste des id ?
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 18h20   #12
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je parie que le texte de la combo n'est pas dans la table que tu veux filtrer...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 19h49   #13
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
dans un schéma simple:
Code :
1
2
3
4
5
6
7
8
 
table1:
  columns:
    name: string(255)
    responsable_user_id: integer
  relations:
    user:
      class: sfGuardUser
generation d'un module admin.
par défaut le champ responsable_user_id dans le filtre est un select.
Sauf qu'avec 10000 users, j'ai un time exceedeed.

je cherche a le remplacer par un champ text tout bête
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 20h07   #14
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Et je suis près à parier que tu es dans le cadre d'un formulaire auto-généré...

Tu peux essayer de changer la méthode du modèle destinée à récupérer les données. De manière à ce que la méthode récupère sur les deux tables.

Mais j'ai (beaucoup) de doutes.

Si non, tu es à la limite de ce que sait faire l'auto génération.

Si ton application est stable, tu peux toujours récupérer le module auto généré dans le cache, en faire un vrai module et le modifier (au niveau du code) pour prendre ton besoin en compte.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 08h20   #15
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
c'est la page index généré par l'admin-generator.
ça serait pas plus simple de considérer ce champ comme un champ étranger et créer un champ filtre de toute pièce?
j'ai fait un truc dans ce genre pour filtrer des données par pays alors que la table ne gérait que les villes.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 09h33   #16
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
C'est possible.

J'utilise très peu les formulaires auto-généré, je manque un peu d'expérience dés que l'on sort des routes préétablies.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h51   #17
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
en m'appuyant sur l'exemple trouve ici

j'ai modifier mon fichier FormFilter.class.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
public function configure()
{
    $this->widgetSchema['usertxt']=new sfWidgetFormFilterInput();
    $this->validatorSchema['usertxt']      = new sfValidatorString();
}
 
public function getFields()
 {
   return array_merge(array('usertxt' => 'responsable'), parent::getFields());
 }
 
 public function addUsertxtColumnQuery(Doctrine_Query $query, $field, $value)
 {
   $fieldName = $this->getFieldName($field);
   //var_dump($value);
   //die;
   if ( $value )
   {
     $a = $query->getRootAlias();
     $query->leftJoin($a.'.user g')
        ->addWhere('g.last_name like ?',$value.'%');
   }
 
   return $query;
 }
et bien entendu, j'ai rajouté dans le fichier generator.yml mon nouveau champ.

La ou ça coince c'est que la valeur $value est egal à Array !!!
quelqu'un a une idée ?
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 12h13   #18
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Normal (?). Je suppose que c'est juste une copie de la propriété values du form. Je m'étonne juste qu'il l'ait appelé value et pas values.

Regarde avec un var_dump ce qu'il y a dedans. Et récupère dans le tableau l'information qui te vas bien. Possible aussi qu'il n'y ait qu'une information pour un string alors qu'il y en aurait plusieurs pour un select.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h08   #19
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
bein le var_dump de $value m'affiche:
Code :
string 'Array' (length=5)
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 15h07   #20
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Bon, j'ai un peu creusé.

First. Dans les autres méthode, le nom de la variable est bien $values avec un "s", ce qui dans les conventions symfony laisse entendre que tu es sur un tableau.

Second. Effectivement, $values devrait bien être un array, quoique. En effet, il semblerait que suivant les cas, il soit juste une valeur (et dans ce cas c'est $value), dans d'autres c'est un tableau dont les retours sont différent d'une méthode add à l'autre.

Je suppose que les widgets particulier sfWidgetFormFiterXxxx y sont pour une partie. Vu que tu te base sur un sfWidgetFromFilterInput tu devraits avoir un tableau avec deux entrées, un is_empty et un text.

Third. Tu rajoutes très justement une entrée à la méthode getFields(), mais le tableau est à l'envers, le nom du champ devrait être avant le type. De toutes les manières, on s'en fiche ! En effet, si le nom de la colonne n'est pas un des nom des champs de l'objet de base du filtre, il ne regarde jamais l’existence du type.

Ton code pourrais, corrigé, ressembler à ceci :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#form filter (non testé)
public function configure()
{
    $this->setWidget( 'responsable', new sfWidgetFormFilterInput( array( 'with_empty' => false ) ) );
    $this->setValidator( 'responsable', new sfValidatorString( array( 'required' => false ) ) );
}
 
public function getFields()
 {
   return array_merge(array('responsable' => 'text'), parent::getFields());
 }
 
 public function addResponsableColumnQuery(Doctrine_Query $query, $field, $values)
 {
   $fieldName = $this->getFieldName($field);
   //var_dump($value);
   //die;
    if (is_array($values) && isset($values['text']) && '' != $values['text'])
   {
     $a = $query->getRootAlias();
     $query->leftJoin( $a.'.user g' )
        ->addWhere( 'g.last_name like ?', $values['text'] . '%' );
   }
 
   return $query;
 }

Pour $value(s), c'est un peu le flou. En fait il renvoie la valeur 'responsable' qui est dans la propriété values du filtre (propriété qui est un objet). Je suppose (mais je ne suis pas descendu suffisamment loin dans le code du sfFormFiltreDoctrine) que le type de donnée dépend du type de champ et/ou du type de widget. En modifiant le champ pour le mettre de type text dans getFields() ce qui le met conforme au widget choisi, je pense qu'on devrait être près de la vérité.

Ensuite tu peux toujours faire un var_dump( $this->values ) qui pourrait vérifier à la source.

Si tu as toujours un truc du genre 'responsable' => 'array' dans la propriété value, c'est qu'il y a un gros problème et qu'il va falloir démonter les Widgets et les validateurs
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web