sur le projet J'écris avec Symfony, il y aura très souvent des fieldsets dans les formulaires, donc je voudrais créer un mécanisme pour pouvoir regrouper les champs par fieldsets et toujours utiliser la méthode __toString() de mes formes. Sur this page, j'ai lu sur le sfWidgetFormSchema, et comment il pourrait être considéré comme un widget, ce qui permet d'imbriquer des champs. Voici donc ce que je faisais: j'ai créé les champs imbriqués:Implémentation de Fieldset dans les formulaires Symfony
$this->setWidgets(array(
'customer' => new sfWidgetFormSchema(array(
'customer_name' => new sfWidgetFormInputText(),
'customer_email' => new sfWidgetFormInputText(array())
)),
'library' => new sfWidgetFormSchema(array(
'library_name' => new sfWidgetFormInputText(),
'library_address' => new sfWidgetFormInputText(),
'library_city' => new sfWidgetFormInputText(),
'library_postcode' => new sfWidgetFormInputText(),
'library_website' => new sfWidgetFormInputText()
)),
'message' => new sfWidgetFormTextarea(array(),array("cols" => 50, "rows" => 10)),
));
Puis j'ai créé une classe fieldsetFormSchemaFormatter, qui enveloppe essentiellement des champs dans les balises, et associé avec les champs sfWidgetFormSchema:
foreach (array('customer', 'library') as $fieldset)
{
$this->widgetSchema[$fieldset]->addFormFormatter('tableless',
new tableLessFormSchemaFormatter($this->widgetSchema['customer']));
$this->widgetSchema[$fieldset]->setFormFormatterName('tableless');
$this->widgetSchema[$fieldset]->setNameFormat('%s');
}
$this->widgetSchema->addFormFormatter('fieldset',
new FieldsetFormSchemaFormatter($this->widgetSchema,
'TableLessFormSchemaFormatter'));
$this->widgetSchema->setFormFormatterName('fieldset');
Et ça a juste bien fonctionné, j'ai eu ma forme de fieldset. Le problème que j'ai est avec la validation, qui n'est pas du tout décrite sur la page que j'ai liée plus tôt dans cette question. Les messages d'erreur apparaissent en haut du formulaire pour tous les champs sauf le champ "message" qui contient un message d'erreur juste après. Je ne pense pas que je serai capable d'afficher les messages d'erreur juste après les lignes et j'utiliserai toujours la construction echo $ form sans coder quelque chose de moche, donc je pense que je vais aller avec une autre implémentation. Je pense que les widgets sfWidgetFormSchema sont destinés à construire des champs interdépendants, qui auraient des règles de validation globales.
Comment implémenteriez-vous cette fonctionnalité fieldset?
Pouvez-vous utiliser simplement des modèles verbeux au lieu et ajouter les fieldsets manuellement? Pas super élégant mais ça marcherait, ça dépend du nombre de formes que vous avez. – Luke
@Luke: Oui, je pourrais, mais j'aimerais ne pas. J'implémente actuellement la fonctionnalité fieldset dans une classe héritant de sfWidgetFormSchema (je vais remplacer la méthode render()). Comme j'ai plusieurs formes dans de nombreux projets, je pense que ça en vaut la peine. – greg0ire