10.1.10 Validierung der Daten
Cake hilft uns viel dabei, die Monotonie der Validierung von Formulardaten zu beseitigen. So gut wie jeder hasst es zahllose Formulare und ihre Validierungsroutinen zu programmieren. CakePHP macht diese Tätigkeit schneller und leichter.
Um in den Genuss der Validierungsmöglichkeiten zu kommen, muss Cakes FormHelper in den Views eingesetzt werden. Der FormHelper ist standardmäßig in den Views aktiviert, um allen Views die Verwendung von $form zu ermöglichen.
Hier unser add View:
<!-- File: /app/views/posts/add.ctp -->
<h1>Add Post</h1>
<?php
echo $form->create('Post');
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->end('Save Post');
?> <!-- File: /app/views/posts/add.ctp --><h1>Add Post</h1><?phpecho $form->create('Post');echo $form->input('title');echo $form->input('body', array('rows' => '3'));echo $form->end('Save Post');?>
In der ersten PHP-Zeile haben wir den FormHelper dazu genutzt den öffnenden Tag für ein HTML-Formular zu erzeugen. Hier die HTML-Ausgabe von $form->create():
<form id="PostAddForm" method="post" action="/posts/add">
<form id="PostAddForm" method="post" action="/posts/add">
Falls create() ohne Parameter aufgerufen wird, nimmt die Funktion an, dass das aktuelle Formular an die add() (oder edit(), wenn ein id Feld im Formular enthalten ist)-Methode des aktuellen Controllers via POST gesendet wird.
Die Aufrufe der $form->input()-Methode erzeugen die Formularfelder mit dem entsprechenden Namen. Der erste Parameter teilt CakePHP mit, auf welches (Datenbanktabellen-)Feld sich das Formularelement bezieht. Der zweite Parameter erlaubt es eine Vielzahl von optionen anzugeben — in diesem Fall die Anzahl der Zeilen des Textarea. Bei input() ist ein bisschen interne Magie am Werk: input() erzeugt unterschiedliche Formularelemente in Abhängigkeit ihrer Eigenschaften im Modell.
Der Aufruf von $form->end() erzeugt einen Absenden-Button und schließt das Formular ab. Falls ein String als erster Parameter übergeben wurde, wird dieser als Aufschrift für den Absenden-Button benutzt. Siehe auch
Kapitel "Kern Helper" für weitere Details zu den Helpern.
Nun aber zurück zu unserem /app/views/posts/index.ctp View.
Hier wollen wir nun einen neuen "Post hinzufügen"-Link einfügen.
Vor <table> fügen wir folgende Zeile ein:
<?php echo $html->link('Post hinzufügen',array('controller' => 'posts', 'action' => 'add'))?> <?php echo $html->link('Post hinzufügen',array('controller' => 'posts', 'action' => 'add'))?>
Sie werden sich vielleicht fragen: Wie teile ich CakePHP meine Validierungsanforderungen mit? Validierungsregeln werden im Modell definiert. Schauen wir nun zurück in unser Post-Modell und führen die nötigen Anpassungen durch:
<?php
class Post extends AppModel
{
var $name = 'Post';
var $validate = array(
'title' => array(
'rule' => 'notEmpty'
),
'body' => array(
'rule' => 'notEmpty'
)
);
}
?> <?phpclass Post extends AppModel{var $name = 'Post';var $validate = array('title' => array('rule' => 'notEmpty'),'body' => array('rule' => 'notEmpty'));}?>
Das $validate Array teilt CakePHP mit, wie die Daten beim Aufruf der save()-Methode validiert werden sollen. In diesem Fall wurde spezifiziert, dass sowohl "body"- als "title"-Feld nicht leer sein dürfen. CakePHPs Validierungsmechanismus ist sehr mächtig, verfügt über eine Vielzahl vordefinierter Regeln (Kreditkartennummern, Email-Adressen, etc.) und ist flexibel. Es können jederzeit eigene Regeln eingefügt werden. Für weitere Informationen zur Validierung siehe Kapitel Daten Validierung.
Jetzt, wo die Validierungsregeln in das Modell eingepflegt sind, versuchen Sie einen Post hinzuzufügen, ohne einen Titel oder "body"-Text einzugeben und beobeachten Sie, was passiert. Da wir die input()-Methode des FormHelper genutzt haben, um unsere Formularelemente zu erzeugen, werden Validierungsfehler automatisch angezeigt.


























