Ich bastele gerade an meiner ersten Erweiterung und versuche da sowas wie 'meinen' FormBuilder hinein zu basteln, nur eben mit den Möglichkeiten von Silex und der dortigen FormFactory. Ziel ist es, die Formulare samt Pflichtfeldern etc. in der config.<Erweiterung>.json zu definieren und aus dieser Konfigurationsdatei heraus dynamisch zu erzeugen.
Beispiel (Auszug aus der .json Datei):
Code: Alles auswählen
"pattern": {
"form": {
"create": {
"fields": [
{ "name": "name", "required": true },
{ "name": "foldername", "required": true },
{ "name": "vendor", "required": true },
{ "name": "copyright", "required": true },
]
}
}
}
Code: Alles auswählen
self::$config = $this->app['utils']->readJSON(THIRDPARTY_PATH.'/dummy/config.dummy.json');
// just shorter
$fields = self::$config["pattern"]["form"]["create"]["fields"];
// get form builder
$form = $this->app['form.factory']->createBuilder('form');
// populate the form
foreach($fields as $field)
{
$form->add(
$field['name'],
(isset($field['type']) ? $field['type'] : NULL),
array(
'attr' => array('class'=>'form-control','style'=>'width:40em;'), // input field
'label_attr' => array('class'=>'col-sm-2 control-label'), // label
)
);
}
return $this->app['twig']->render($this->app['utils']->getTemplateFile(
'@thirdParty/dummy/Template',
'admin/create.form.twig'),
array(
'toolbar' => $this->getToolbar('create'),
'form' => $form->getForm()->createView()
));
Code: Alles auswählen
{{ form_start(form,{'attr':{'role':'form'}}) }}
<fieldset>
<legend>{{ 'Legend here'|trans }}</legend>
{{ form_errors(form) }}
{{ form_widget(form) }}
</fieldset>
{{ form_end(form) }}