2010-03-21 6 views
1

Je suis en mesure de faire ce qui suit pour toutes les cases dans un ensemble (dans une action):cases spécifiques vérifiées dans symfony 1.4

$this->form->getWidget('some_form_field')->setAttribute('checked', 'checked'); 

... mais je suis incapable de définir des cases à cocher spécifiques à fait tic tac sur la base des données renvoyées par le db.

Je suis après quelque chose comme:

$this->form->getWidget('some_form_field')->setAttributes(array(....)); 

... où je peux me référer aux cases spécifiques à cocher en quelque sorte, ou passer un tableau à elle.

Il n'y a rien dans la documentation de symfony à ce sujet et j'en ai eu assez d'essayer une douzaine de combinaisons pour le faire fonctionner.

Toute aide serait appréciée.

Merci.

Répondre

3

Cela semble un peu inhabituel? Utilisez-vous les formes de propel/doctrine générées? Ils devraient le gérer automatiquement.

Dans tous les cas, la définition de l'attribut checked n'est pas la bonne façon d'y parvenir. Une meilleure façon est dans la forme (parce que je me souviens bien, $ this-> widgetSchema est protégé) à faire:

$this->widgetSchema['some_form_field']->setDefault(array('value1', 'value2')); 

Ce sera alors causer des widgets avec ces valeurs à vérifier.

(si c'est pas juste, je l'ai écrit sur le dessus de ma tête, je peux creuser un peu de code et à vérifier, alors laissez-moi savoir!)

+0

@benlumley ... merci mais le formulaire est rendu " pas vérifié "volontairement, de sorte que lorsque je tire des données dans mon action à partir de la base de données, je peux ensuite rendre le formulaire dans le modèle avec les cases à cocher pré-vérifiées qui ont été stockées de cette manière dans la base de données. Comme je le note ci-dessus, je peux l'obtenir pour pré-vérifier tout d'eux bien (à la fois dans la classe de forme et et dans l'action), mais j'ai besoin de contrôle sur le niveau des cases individuelles. – Tom

+1

... en fait votre code ci-dessus est la bonne direction. Il suffit de le faire fonctionner: $ this-> form-> getWidget ('some_form_field') -> setDefault (array ('1', '2')); Merci! – Tom

+0

Vous pouvez toujours réaliser ceci en ajoutant une méthode au formulaire pour accepter l'entrée et mettre 'cochée' sur les cases appropriées. Vous pouvez ensuite appeler cette méthode depuis l'action et lui transmettre vos données. Si vous avez besoin de faire cela dans la vue, ce qui, à mon avis, est un peu brouillon, il existe des moyens de le faire aussi - chaque méthode de rendu de widgets peut accepter un tableau des valeurs actuelles. – benlumley

Questions connexes