Yii – Der Weg zum Formular

Es hat ja offenbar einige Änderungen von der Version 1.1 zur 2.0 des Yii-Frameworks gegeben, die offenbar noch nicht alle so sauber auch dokumentiert sind. Deshalb war der Weg zum ersten Formular in Yii für mich etwas holprig.

Form als Model

Ähnlich einer Tabelle wird ein Formular auch als Model angelegt und auch leider, so die Standard-Empfehlung, auch im Ordner der Models abgelegt.
Das finde ich nicht ganz so toll, weil das in einem größeren Projekt schnell unübersichtlich wird.

Ich werde das also in anderen Projekten auch anders handhaben. Hier bleibe ich aber erst einmal auf dem Standard-Pfad.

Das Formular-Endergebnis
Formular mit zwei Dropdowns

Hier zeige ich vorerst den Weg zu einem Formular mit zwei Dropdowns, die die Auswahl auf eine bestimmte Eishockey-Liga einschränken sollen.
Zwei Felder und ein Submit-Knopf, die wegen der zu aggregierenden Daten schon eine kleine Herausforderung darstellen.

Wenn man mit dem Tool Gii vertraut ist, kann man damit problemlos das Grund-Model anlegen, ohne das es viel Tipparbeit macht.

Wie das genau geht, steht hier:
Getting Started: Basic Usage

Leider hilft einem das Tool nicht bei DropDowns und es brauchte selbst für mich einen Blick zu Stackoverflow, um dort meinen Weg zum Formular zu finden.

Model anlegen

Jetzt legen wir aber zunächst ein Model an, ob nun per Hand oder mit Gii.
Am Ende wird es wie folgt aussehen, einzelne Abschnitte erläutere ich dann noch:

Formular-Felder festlegen

Die Member-Variablen der Model-Klasse legen die Felder fest, auf die es ankommt und spezifizieren auch die benötigten Daten.

public $ligaId;
    public $saisonId;

    public function rules(){
        return
        [
         [['ligaId','saisonId'], 'required'],
         [['ligaId','saisonId'], 'integer']
        ];
    }
 

Die Angaben in der Methode rules() legen zugleich auch Regeln für die Benutzung und Verarbeitung der Daten fest:

  • Beide Felder sind notwendig.
  • Die enthaltenen Daten müssen vom Typ “integer” sein.

Unter attributeLabels() legt man die Bezeichner der Felder fest, die dann auch im Formular auftauchen:

public function attributeLabels()
    {
        return [
            'ligaId' => 'Liga',
            'saisonId' => 'Saison'
        ];
    }

Das sind auch alle nötigen Informationen um das Formular anzeigen zu können. Die übrigen Methoden erläutere ich später.

Formular anzeigen

Nun kommt der View ran, in dem das Formular auftauchen soll. Er benötigt folgende Zeilen um das Formular anzuzeigen:

Natürlich müssen die benötigen “use“-Befehle in den Kopf des Views. Die Fehlen in diesem Ausschnitt.
Verpackt ist das Formular in einem Panel realisiert mit bootstrap-CSS, welches von Yii ja unterstützt wird.

Im Controller legt man nun noch ein Objekt unseres Formulars ($selektor) an und übergibt es in den View, hier im Beispiel über eine zusätzliche Methode realisiert, die ein Objekt des Formulars erzeugt:

return $this->render('index', [
            'vereine'       => $vereine,
            'pagination'    => $pagination,
            'anzahl'        => $query->count(),
            'selektor'      => $this->getLigaSelektor(),
            Url::previous()
        ]);

Und schwupps, es ist implementiert…

Daten für den DropDown

Jetzt kommen die noch ungenutzten Methoden in unserem Form-Model zum Zug und stellen über den Aufruf im View die notwendigen Daten für die DropDown-Felder zur Verfügung.
Benutzt wird dafür der ArrayHelper, der die Daten gleich in die richtige Form bringt und uns so komfortabel Arbeit erspart.

public function getLigaArray(){
        return ArrayHelper::map(Ligen::find()->all(), 'ligaId', 'ligaName');
    }

    public function getSaisonArray(){
        return ArrayHelper::map(Saison::find()->all(), 'saisonId', 'saisonName');
    }

Benutzt wir dabei jeweils das Model der Tabellen “Saison” und “Liga“, die dann nach ID und Name ausgewertet werden, um diese in Options-Felder zu verwandeln.

TheFan1968

Datenbank- und Web-Fuzzi, Radfahrer, Eishockeyfan

%d Bloggern gefällt das: