Archive for the ‘Zend_Form’ tag
Linkpool Nummer 5
Was für eine aufregende Woche: Polen verliert ihr Präsidentenpaar, in Afghanistan fallen deutsche Soldaten, eine Aschewolke nebelt Europa ein, ein Video „Collateral Murder“ aus dem Irak taucht bei Wikileaks auf. Aber auch in der IT-Welt gibt es hier und da interessante News und Blogeinträge:
Deployment kurz und gut zusammengefasst in einer Präsentation:
Mit HTML5 verlieren wir einige alte HTML-Tags:
Mocks beim Testen:
OAuth für IMAP und SMTP:
Daten rauszugeben an ein Medium das nicht vergisst kann Schaden verursachen:
Ein Zend_Form Validator über mehrere Felder (Passwort wiederholen):
Ich hatte leider noch keine Zeit, Googles neue Sicherheits-Test–Software auszuprobieren:
phpMyAdmin Timeout erhöhen:
Pflichtfelder mit Sternchen markieren via CSS
Oft möchte man in einem Formular eine Prüfung einbinden, die anschlägt, wenn das Feld nicht gefüllt wurde. Das geht mit dem Zend Framework und Zend_Form sehr einfach:
class Wb_Form_Subscription extends Zend_Form { public function __construct($options = null) { $element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setRequired(true); $this->addElement($element); } }
Mit der setRequired() Funktion fügen wir automatisch eine NotEmpty-Prüfung hinzu, außerdem erhält das Element die CSS-Klasse „required“:
<label for="Email" class="required">Email</label>
Wenn das Formular nun abgeschickt wird und das Feld leer bleibt, erhalten wir eine Fehlermeldung. Diese werden wir nachher noch anpassen. Doch erst möchten wir noch das Feld als Pflichtfeld markieren, mit einem kleinen roten Stern, so wie hier:
Das können wir auf 3 Arten erledigen, wobei die dritte mein Favorit ist:
$element->setLabel('Email *')
$element->getDecorator('label')->setOption('requiredSuffix', ' * ');
oder via CSS:
.required { background-image:url(/img/required-field.png); background-position:top right; background-repeat:no-repeat; padding-right:10px; }
Eine Beispieldatei kann hier runtergeladen werden.
Achso, die englische Fehlermeldung wollen wir noch anpassen, das geht so:
$element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setAttrib('size', 90) ->setRequired(true) ->addErrorMessage('Diese Email-Adresse ist ungültig') ->addValidator('EmailAddress'); $this->addElement($element);
Wenn man für die verschiedenen Validatoren unterschiedliche Fehlermeldungen haben möchte, geht das so:
$element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setAttrib('size', 90) ->setRequired(true) ->addValidator('NotEmpty', false, array('messages' => 'Leer')) ->addValidator('EmailAddress', false, array('messages' => 'Ungültig')); $this->addElement($element);
Möchte man nur eine Fehlermeldung haben, muss man den zweiten Parameter ($breakChainOnFailure) auf true setzen. Sobald ein Validator fehlschlägt, wird die Prüfung aller weiteren Validatoren abgebrochen.
Setzt man Zend_Translate ein, sollte man übrigens die Fehlermeldungen mittels Zend_Translate übersetzen lassen, und nicht so wie oben gezeigt. Dazu fügt man einfach eine neue Übersetzung hinzu, mit dem Schlüssel, der sich in den Klassenkonstanten der jeweiligen Validator-Klasse versteckt, wie hier beispielsweise beim EmailAddress-Validator.