IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

sfWidgetFormDoctrineJQueryAutocompleter et is_empty [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    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 ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Essai d'ajouter l'option with_empty => true.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    500 | Internal Server Error | InvalidArgumentException
    sfWidgetFormDoctrineJQueryAutocompleter does not support the following options: 'with_empty'.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Quel est l'intérêt de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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()

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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.

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    arfeu, oui.
    il existe un form filter qui ferait la même chose ?

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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.

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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.

  10. #10
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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 ?

  12. #12
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je parie que le texte de la combo n'est pas dans la table que tu veux filtrer...

  13. #13
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    dans un schéma simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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.

  15. #15
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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.

  16. #16
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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.

  17. #17
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en m'appuyant sur l'exemple trouve ici

    j'ai modifier mon fichier FormFilter.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  18. #18
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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.

  19. #19
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bein le var_dump de $value m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string 'Array' (length=5)

  20. #20
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [1.x] sfWidgetFormDoctrineJQueryAutocompleter remettre a null
    Par erictomcat dans le forum Symfony
    Réponses: 1
    Dernier message: 08/03/2012, 11h59
  2. Réponses: 3
    Dernier message: 22/02/2012, 17h53
  3. [1.x] sfWidgetFormDoctrineJQueryAutocompleter dans sfGuardUserAdminForm
    Par erictomcat dans le forum Symfony
    Réponses: 9
    Dernier message: 21/10/2010, 10h07
  4. Réponses: 19
    Dernier message: 08/06/2010, 14h20
  5. Fonction is_empty($dir); ?
    Par Aliosha dans le forum Langage
    Réponses: 6
    Dernier message: 30/04/2007, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo