2011-06-20 5 views
0

Je développe une application web basée sur symfony. J'ai beaucoup de modèles (ordinateur portable, Netbook, Ipad, tablette .... tous ces modèles ont hérité de modèle de produit). Basé sur ces modèles j'ai également des formes (LaptopForm, NetbookForm ... ainsi de suite). Dans ma classe d'action je reçois Nom du modèle et lui attribuer à modèle:Modèle de formulaire de modèle dynamique Symfony

$modelForm = $this->modelName.'Form'; 

$this->form = new $modelForm(); 

Puis, dans mon modèle je le fais <?php echo $form ?> ..Il n'y a aucun problème, il imprime tous les champs et les étiquettes dans le tableau html.

Mais mon problème est que je veux diviser le modèle en 2 parties. Dans les champs généraux, je souhaite afficher les champs du modèle de produit (nom, prix ...), mais les champs spéciaux sont modifiés en fonction du type de produit. Comment puis-je gérer cet ensemble de champs spéciaux? Quelqu'un peut-il donner une idée ou une source s'il vous plaît?

Merci d'avance!

Répondre

1

Vous pouvez le gérer manuellement, dans votre classe de formulaire spécialisé (ne modifiez pas la classe de base).
Peut-être, avec l'utilisation de sfWidgetFormSchema:
http://www.symfony-project.org/forms/1_4/en/A-Widgets#chapter_a_sfwidgetformschema Vous devez nommer le widget « général » et « spécial », pour une réutilisation de stanhdard dans le modèle de forme, comme ceci:

<?php echo $form['general'] ?> 
<?php echo $form['special'] ?> 
+0

Merci pour la réponse C'est très utile. J'ai une autre question. Lorsque je génère ces modèles à partir de la ligne de commande, les champs de classe de base sont automatiquement définis sur "$ this-> setWidgets (...)". Puis-je configurer symfony pour que les champs de modèles créés automatiquement soient "$ general = sfWidgetFormSchema (array ('name' => new fWidgetFormInputText(), ...)" .. Merci – qasanov

+0

J'ai peur que ce ne soit pas possible. peut-être que vous pouvez essayer quelque chose avec le système d'héritage dans la classe Productform qui doit être héritée sous une autre forme comme desktop ... – dxb

Questions connexes