Dynamische Formulare mit dem kitFramework

Archivierte Beiträge aus dem kitFramework Forum
Antworten
Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Dynamische Formulare mit dem kitFramework

Beitrag von shadowcat » 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):

Code: Alles auswählen

  "pattern": {
    "form": {
      "create": {
        "fields": [
          { "name": "name", "required": true },
          { "name": "foldername", "required": true },
          { "name": "vendor", "required": true },
          { "name": "copyright", "required": true },
        ]
      }
    }
  }
Auslesen und den Formbuilder füllen ("dummy" ist hier der Name der Erweiterung):

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()
            ));
Der Formularteil im Template:

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) }}
Nicht suchen, hier steckt weder eine Frage noch ein vollständiges How-To drin. :D Ich wollte einfach erst mal irgendwo festhalten, was ich bisher gemacht habe.
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Benutzeravatar
shadowcat
Administrator
Beiträge: 3952
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: Dynamische Formulare mit dem kitFramework

Beitrag von shadowcat » Fr 31. Okt 2014, 14:11

Der Formbuilder ist als Helper in kfBasic gewandert. Beispiel für ein generiertes Formular samt Fehlermeldungen:
2014-10-31_140915.png
2014-10-31_140915.png (18.71 KiB) 643 mal betrachtet
Der dazugehörige Teil aus der .json Datei:

Code: Alles auswählen

  "pattern": {
    "form": {
      "create": {
        "action": "_self",
        "method": "post",
        "fields": [
          {
            "name": "extname",
            "required": true,
            "label_attr":  { "title": "This is the name of the new extension. Use CamelCase here. Examples: miniShop, kitCommands", "data-toggle": "tooltip" },
            "constraints": { "Length": {"min": 5, "minMessage": "The name should have at least 5 letters"} }
          },
          { "name": "foldername", "required": true },
          { "name": "vendorname", "required": true },
          { "name": "vendorurl" },
          { "name": "vendoremail", "constraints": { "Email": { "message": "The eMail address is not valid" } } },
          { "name": "copyright", "required": true },
          {
            "name": "shortdesc",
            "constraints": { "Length": {"min": 10, "minMessage": "The short description should have at least 10 letters"} }
          },
          {
            "name": "longdesc",
            "type": "textarea",
            "constraints": { "Length": {"min": 15, "minMessage": "The description should have at least 15 letters"} }
          }
        ]
      }
    }
  },
Beispielfunktion zum Generieren des Formular:

Code: Alles auswählen

    private function ControllerGetForm()
    {
        self::$config = $this->app['utils']->readJSON(THIRDPARTY_PATH.'/extensionCreator/config.extensioncreator.json');
        return \phpManufaktur\Basic\Control\Forms\Helper::build($this->app,self::$config);
    }
Ausgabe der Fehler:

Code: Alles auswählen

            $this->setAlert(
                \phpManufaktur\Basic\Control\Forms\Helper::getErrorsAsString($form),
                array(),
                self::ALERT_TYPE_WARNING
            );
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Antworten