Yii – Daten aus dem Formular speichern
Zuletzt hatten wir uns ja mit dem Erstellen eines Formulars im Yii-Framework beschäftigt. Diesmal wollen wir die Daten, die wir eingegeben haben auch speichern.
Das Formular
Wir benutzen heute das Formular eines gerade entstehenden Projektes, in dem es um Katzenfutter geht. Das Formular sieht wie folgt aus:
Zum Erstellen des Formulars wird wieder ein Model benötigt, welches hier um zwei Array-Helper erweitert wurde um die normalisierten Referenz-Angaben aus dem Datenmodell „menschenlesbar“ im Formular darzustellen (also als Text und nicht als ID aus einer Tabelle).
Der Kenner der Materie wird an Hand des obigen Bildes die einzelnen Elemente im Quellcode wiederfinden, denke ich.
Natürlich braucht das Formular auch noch einen View in dem dann auch die Action-URL des Formulars Platz findet:
Die dritte Komponente endlich ist der Controller, hier speziell die Methode actionAddSorte(), die Darstellung und Verarbeitung des Formulars vornimmt.
Wie läuft das Ganze ab?
Das Model der Form wird benötigt um zu definieren, welche Felder im Formular abgefragt werden sollen und im Abschnitt rules() ist definiert, welche Felder zwingend erforderlich sind und welche Werte die Felder enthalten sollen.
Diese grobe Definition langt zumindest in der Entwicklung für ein einfaches validieren der Daten. Eine Validierung habe ich hier extra noch weggelassen, um das Thema nicht zu unübersichtlich zu gestalten. Damit wird sich der nächste Beitrag beschäftigen.
Mit diesem Model kann nun das Formular im View gerendert werden. Im Beispiel ist es in ein Bootstrap-CSS-Panel eingebettet, also im bordeigenen CSS-Framework geschrieben.
Die Action des Formulars ist eine URL-Angabe. Sie besteht aus dem Namen des Ordners in dem der View liegt und dessem Namen, also katfu-db/add-sorte.
Im Controller wird das Formular initialisiert und als $model an dem View übergeben und mit Hilfe der Klasse ActiveForm Stück für Stück dargestellt.
Da die zwei Felder art_Id und marke_Id durch den ArrayHelper befüllt werden und so zu Option-Tags für ein Dropdown umgestaltet werden, muss ihnen das Feld-Label „vor Ort“ nochmals mitgeteilt werden (siehe z.B. Zeile 30 des Form-Views).
Das Formular ist somit bereit und wartet auf die Verarbeitung.
Daten speichern
Die Daten müssen nun in der Tabelle gespeichert werden. Die entsprechende Tabelle heißt FutterSorte und natürlich existiert ein Model in dem sie definiert ist.
Dargestellt im Controller ist der „OldSchool“-Weg der Datenspeicherung, weil ich es so am liebsten habe und das Prinzip hier einfach und gut erkennbar ist.
Der Variablen $post wird das Post-Array aus dem Request übergeben. D. h. der Abschnitt der den Namen des Formulars FutterSorteEintragForm trägt.
Darin sind alle Werte des Formulars enthalten.
Liegt ein Post vor, erstellen wir eine Instanz der Tabelle FutterSorte in der Variablen $fs und weisen hier die einzelnen Werte zu, die gespeichert werden müssen. Der Befehl $fs->save() schreibt dann die Zeile in die Tabelle. Fertig.
Hier noch das Model der Tabelle FutterSorte:
Wie schon angekündigt, kümmert sich der nächste Artikel um die Validierung der Daten.