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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 ?

  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
    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.

  9. #9
    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)

  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
    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

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    var_dump de $values donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string 'Array' (length=5)
    donc forcément le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (is_array($values) && isset($values['text']) && '' != $values['text'])
    renvoie faux et aucun filtre n'est appliqué

+ Répondre à la discussion
Cette discussion est résolue.

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