2012-10-07 7 views
0

Je ne comprends pas pourquoi cette case avec la valeur = 0 est vérifiée par populate() alors qu'aucune donnée ne soit passé de cette case à cocher ...Zend_Form: équipez question sur une case avec la valeur = 0

Mon élément de formulaire:

$this->addElement('multiCheckbox', 'etoiles', array(
    'filters' => array('Int'), 
    'separator' => '', 
    'label_placement' => 'prepend', 
    'label_class' => 'caseacocher', 
    'decorators' => $decorator_chain, 
)); 

$listeEtoiles = array(
    '0' =>'Sans étoiles', 
    '1' => '1 étoile"', 
    '2' => '2 étoiles', 
    '3' => '3 étoiles', 
    '4' => '4 étoiles', 
    '5' => '5 étoiles', 
) ; 
$this->getElement('etoiles')->addMultiOptions($listeEtoiles) ; 

Comment puis-je remplir le formulaire dans mon contrôleur:

$this->view->searchForm->populate($this->getRequest()->getPost()) ; 

Ce que je reçois quand le dumping $this->getRequest()->getPost('etoiles'): NULL

Ce que je reçois pour ma case à cocher:

<input id="etoiles-0" type="checkbox" checked="checked" value="0" name="etoiles[]"> 

Je ne comprends pas. Comment est-il possible d'obtenir cette case cochée, alors qu'il n'y a AUCUNE donnée sur etoiles[] ?? J'ai juste compris que mon filtre "Int" avait quelque chose à voir avec ça. Devrais-je l'enlever? Et si je veux garder ce filtre Int?

Il n'y a pas de valideurs. Devrais-je en ajouter? Qu'en est-il du validateur InArray? Mon tableau de valeurs utilise des index de chaînes car je pensais que les données $ _POST étaient passées en chaînes. Est-ce une erreur?

Tout commentaire ou aide sera appréciée :)

Répondre

0

Il peut être une confusion entre la chaîne '0' et int 0 (non cochée pour les éléments de formulaire radio) et null, une bizarrerie de PHP.

D'autant plus que vous filtrez des valeurs d'entrée int, alors que votre tableau des valeurs utilise les index de chaîne (est-il une raison de ne pas utiliser la valeur par défaut InArray validateur?)

De plus je vois que l'aide FormRadio utilise in_array($opt_value, $value) sans le paramètre strict pour déterminer la propriété checked.

+0

Pour être honnête, c'est un copier/coller que j'ai fait juste pour illustrer mon problème. Oubliez les validateurs, il n'y a pas de validateurs. Devrais-je en ajouter? Qu'en est-il de ce validateur 'InArray'? Mon tableau de valeurs utilise des index de chaînes car je pensais que les données '$ _POST' étaient passées en chaînes. Est-ce une erreur? – LittleBigDev