2010-02-28 5 views
1

Supposons qu'il existe une colonne image_url dans la base de données.Comment remplir dynamiquement un widget de choix dans symfony?

Je veux que l'utilisateur de choisir parmi plusieurs images recommandées, ce qui est quelque chose comme ceci:

<input type="radio" value="domain.com/path_to_img1" name="image_url" /> 
<img src="domain.com/path_to_img1" /> 
<input type="radio" value="domain.com/path_to_img2" name="image_url" /> 
<img src="domain.com/path_to_img2" /> 

Lorsque les urls d'images sont générées à la volée.

Comment faire cela dans une saveur de symfony par sfForm?

J'ai essayé ceci:

$form->widgetSchema['key'] = new sfWidgetFormSelect(...) 

Mais obtenir une erreur fatale:

Cannot access protected property

Mais quelle est la manière exacte de le faire?

Répondre

2

Eh bien, l'approche standard consiste à écrire un widget.

Dans votre cas concret, il semble que vous vouliez effectuer un choix, n'est-ce pas? Vous devez donc implémenter un autre moteur de rendu sfWidgetFormChoice. Pour ce faire, héritez sfWidgetFormSelectRadio (appelons-les sfWidgetFormSelectRadioImage) pour les apprendre à rendre les étiquettes <img>. Ensuite, demandez sfWidgetFormChoice explicitement pour se rendre avec la classe sfWidgetFormSelectRadioImage, et cela devrait être tout.

+0

Pouvez-vous illustrer par un exemple? – user198729

+0

Non, maintenant je ne peux pas. Conseil: fouillez et remplacez 'sfWidgetFormSelectRadio :: render()'. – develop7

+0

Merci.Mais je ne trouve pas le code pour ** dynamiquement ** remplir les options là-bas. – user198729

0

Dans la configuration de votre formulaire insérer ce qui suit:

$this->widgetSchema['choices'] = new sfWidgetFormChoice (array('choices' => $custom_values_array)); 
+1

Ne pouvez-vous pas déplacer la logique derrière le bâtiment de $ custom_values_array de l'action vers le formulaire? –

Questions connexes