Dynamische Formulare mit dem kitFramework
Verfasst: Mi 29. Okt 2014, 17:55
Dieses Posting richtet sich an Entwickler und wird ggfs. irgendwann mal in ein Wiki o.ä. übertragen.
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):
Auslesen und den Formbuilder füllen ("dummy" ist hier der Name der Erweiterung):
Der Formularteil im Template:
Nicht suchen, hier steckt weder eine Frage noch ein vollständiges How-To drin. Ich wollte einfach erst mal irgendwo festhalten, was ich bisher gemacht habe.
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) }}