CakePHP & DIEVOLUTION Blog

CakePHP 1.2 - der neue Form Helper

 

Da leider noch keine Anleitung zu CakePHP 1.2 existiert (bzw. veröffentlicht wurde), hier eine kleine Anleitung, wie ihr den Form-Helper nutzen könnt, um eure Formulare noch kompakter zu gestalten und wo die Stolpersteine für Umsteiger liegen.

Was ist neu im neuen Form Helper?

  • Geänderte Art des Formularaufbaus
  • Automatische Label Generierung
  • Alle Form-Elemente sind nun im Form-Helper

Gehen wir die Punkte doch einfach mal nacheinander durch.

Geänderte Art des Formularaufbaus
War es im alten HTML Helper noch nötig, mit $html->input zu arbeiten und man viel Arbeit hatte, das Formular schön herzurichten, ist dies mit der neuen Version alles einfacher geworden.
Ein Formular wird nun mit

  1. <?php echo $form->create(‘Model’);?>

gestartet. Aber hier liegt auch schon der erste Stolperstein. Eigentlich müsste ein so erstelltes form-Tag die “action” auf das Dokument legen, wo es erstellt wurde. Hier haben sich die Cake Entwickler aber anders entschieden und so entsteht aus dem PHP Code oben folgender HTML Code:

  1. <form id=“ModelAddForm” method=“post” action=“/models/add”>

Ohne weitere Parameter linkt Cake also automatisch auf die Aktion “add”. Dies wollen wir aber in den meisten Fällen nicht, daher verwendet man meistens folgendes:

  1. <?php echo $form->create(‘Model’, array(‘action’=>‘deineAktion’);?>

In das Array können auch weitere Angaben wie ’style’ o.ä. hinzugefügt werden.

Automatische Label Generierung
Eine weitere Neuerung ist das Hinzufügen von Labels bei Einsatz von $form->input. Hier geschieht folgendes:

  1. <?php echo $form->input(‘username’);?>

Diese einfache Anweisung ist mächtiger als es zunächst scheint. Zunächst einmal wird außer dem Input Feld ein “Label” Feld erstellt, welches den Namen “Username” beinhaltet, das erste Zeichen wird also groß geschrieben. Das Input Feld selbst kann im Controller durch $this->data[’Model’][’username’] abgerufen werden. Hier übernimmt das Formular automatisch das Model, wenn selbiges im $form->create gesetzt wurde.
Möchte man nun ein anderes Model im Formular haben, kommt die neue Model.Feldname Regel zum Einsatz, denn Model/Feldname ist inzwischen veraltet.

  1. <?php echo $form->input(‘Model.Feldname’, array(‘label’=>false);?>

Hier habe ich auch gleich noch mitgegeben, dass kein Labelfeld gerendert werden soll. Dasselbe geht übrigens auch mit array(’div’=>false), welches um jedes Formularfeld gelegt wird. Dies ist vor allem nützlich, wenn man inline Input Felder braucht, zum Beispiel bei der oft in Deutschland verwendeten Schreibweise PLZ / Ort. Dies sähe in Cake wie folgt aus:

  1. <?php echo $form->input(‘plz’, array(‘div’=>false,‘label’=>‘PLZ / Ort’,‘class’=>’short_input’);?>
  2. <?php echo $form->input(‘ort’, array(‘label’=>false, ‘div’=>false);?>

Das Label kann somit auch, wie oben gezeigt, dynamisch verändert werden, was gerade bei englischen SQL Spaltennamen ein Segen ist.

Kommen wir zum letzten Stolperstein:
Alle Form-Elemente sind nun im Form-Helper
Hier ist die größte Änderung. Alle Formular Elemente sind nun im Form-Helper vertreten, $html->input ist veraltet und wird vom DEBUG als Warnung gezeigt, $html->submit ist schon gar nicht mehr verteten. Wer also mit dem Gedanken spielt seine 1.1er Cake Anwendung auf 1.2 zu portieren sollte ein wenig Zeit mitbringen, um alle Views entsprechend einzustellen.

Damit solls auch erstmal gut sein mit den Stolpersteinchen und Änderungen im neuen Cake 1.2. Wer mehr über den Form Helper und die anderen 1.2 helper erfahren will, dem sei noch diese Seite ans Herz gelegt. Hier findet sich zu jedem Helper noch ein Beispiel.


Veröffentlicht am Freitag, den 28. September 2007 um 15:41 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

3 Reaktionen zu “CakePHP 1.2 - der neue Form Helper”

 

  1. Klaus Am 8. Oktober 2007 um 18:34 Uhr

    Nun wünschen wir uns mal von Cake auch eine automatische Label-Generierung bei password, textarea… ;-)

    Übrigens: Bei Deinen Code-Beispielen fehlt bei allen array-Angaben eine schließende Klammer!

    Klaus

  2. h0nIg Am 28. November 2007 um 01:53 Uhr

    Falsch! es existiert eine temporäre doc:

    http://tempdocs.cakephp.org/

  3. dievo Am 28. November 2007 um 10:01 Uhr

    Richtig! Aber die Tempdocs gibt es erst seit Mitte November, der Beitrag ist von Ende September :D

Einen Kommentar schreiben