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 ?
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 ?
Essai d'ajouter l'option with_empty => true.
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
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) ); }
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'.
Quel est l'intérêt de la ligneplacée là ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->widgetSchema['user_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
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()
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.
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.
en m'appuyant sur l'exemple trouve ici
j'ai modifier mon fichier FormFilter.class.php
et bien entendu, j'ai rajouté dans le fichier generator.yml mon nouveau champ.
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; }
La ou ça coince c'est que la valeur $value est egal à Array !!!
quelqu'un a une idée ?
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.
bein le var_dump de $value m'affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part string 'Array' (length=5)
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![]()
var_dump de $values donne:donc forcément le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part string 'Array' (length=5)renvoie faux et aucun filtre n'est appliqué
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (is_array($values) && isset($values['text']) && '' != $values['text'])![]()
Partager