config/form_schema.php
[
'steps' => [
[
'title' => '...',
'description' => '...',
'fields' => [
[
'key' => 'feldname',
'label' => 'Label',
'type' => 'text|email|date|select|textarea|checkbox|file|table',
'required' => true|false,
'required_if' => ['field' => 'anderes_feld', 'equals' => 'Wert'],
'options' => [['value' => 'x', 'label' => 'X']],
'rows' => 4, // nur für type=table
'columns' => [ // nur für type=table
['label' => 'Spalte 1', 'type' => 'text'],
['label' => 'Spalte 2', 'type' => 'date'],
],
'accept' => '.pdf,.jpg',
'max_length' => 100,
'max_size' => 10485760,
'extensions' => ['pdf','jpg'],
'mimes' => ['application/pdf','image/jpeg'],
]
]
]
]
]
required: true macht Feld immer verpflichtend.required_if macht Feld verpflichtend, wenn Quellfeld exakt equals entspricht.type: table gilt ein Feld als leer, wenn in allen Datenzeilen alle Zellen leer sind.type: table rendert eine feste Tabelle mit vordefinierten Spalten (columns) und fixer Zeilenanzahl (rows).form_data-Wert gespeichert (CSV-Textblock mit Headerzeile + festen Datenzeilen).Beispiel-Format im gespeicherten Feldwert:
Feuerwehr/Hilfsorganisation,von,bis
Organisation A,2026-01-01,2026-02-01
Organisation B,2025-01-01,2025-02-01
...
rand8) zur Kollisionsvermeidung.type: file Feld rendert das Frontend zwei Eingabepfade:
name = <field_key>)name = <field_key>__camera, accept=image/*, capture=environment)