1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 21996 -->
<!-- Reviewed: no -->
<sect1 id="zend.form.standardElements">
<title>Standard Form Elemente die mit dem Zend Framework ausgeliefert werden</title>
<para>
Zend Framework wird mit konkreten Element Klassen ausgeliefert welche die meisten
<acronym>HTML</acronym> Form Elemente abdecken. Die meisten spezifizieren einfach einen
speziellen View Helfer zur Verwendung wenn das Element dekoriert wird, aber einige bieten
zusätzliche Funktionalitäten an. Nachfolgend ist eine Liste aller solcher Klassen, sowie
eine Beschreibung der Funktionalität die Sie anbieten.
</para>
<sect2 id="zend.form.standardElements.button">
<title>Zend_Form_Element_Button</title>
<para>
Wird für die Erstellung von <acronym>HTML</acronym> Button Elementen verwendet wobei
<classname>Zend_Form_Element_Button</classname>
<link linkend="zend.form.standardElements.submit">Zend_Form_Element_Submit</link>
erweitert, und seine eigene Funktionalität hinzufügt. Sie spezifiziert den 'formButton'
View Helfer für die Dekoration.
</para>
<para>
Wie das Submit Element, verwendet es das Label des Elements als den Elementwert für
Darstellungszwecke; in anderen Worten, um den Text des Buttons zu setzen, muß der
Wert des Elements gesetzt werden. Das Label wird übersetzt wenn ein
Übersetzungsadapter vorhanden ist.
</para>
<para>
Weil das Label als Teil des Elements verwendet wird, verwendet das Button Element nur
den <link linkend="zend.form.standardDecorators.viewHelper">ViewHelper</link> und den
<link linkend="zend.form.standardDecorators.dtDdWrapper">DtDdWrapper</link> Dekorator.
</para>
<para>
Nach der Veröffentlichung oder Prüfung einer Form, kann geprüft werden ob der gegebene
Button geklickt wurd indem die <methodname>isChecked()</methodname> Methode verwendet
wird.
</para>
</sect2>
<sect2 id="zend.form.standardElements.captcha">
<title>Zend_Form_Element_Captcha</title>
<para>
CAPTCHAs werden verwendet um automatische Übermittlung von Formularen durch Bots und
andere automatische Prozesse zu verhindern.
</para>
<para>
Das Captcha Formularelement erlaubt es den <link
linkend="zend.captcha.adapters">Zend_Captcha Adapter</link> der als Formular CAPTCHA
verwendet werden soll anzupassen. Er setzt dann diesen Adapter als Prüfung für das
Objekt, und verwendet den Captcha Dekorator für die Darstellung (welche den CAPTCHA
Adapter aufruft).
</para>
<para>
Adapter können alle Adapter in <classname>Zend_Captcha</classname> sein, sowie jeder
eigene Adapter der irgendwo anders definiert wurde. Um das zu erlauben, kann ein
zusätzlicher Schlüssel für den Plugin Ladetyp, 'CAPTCHA' oder 'captcha' übergeben
werden, wenn der Plugin Loader Präfixpfad spezifiziert wird:
</para>
<programlisting language="php"><![CDATA[
$element->addPrefixPath('My_Captcha', 'My/Captcha/', 'captcha');
]]></programlisting>
<para>
Captcha's können dann durch Verwendung der <methodname>setCaptcha()</methodname> Methode
registriert werden, welche entweder eine konkrete CAPTCHA Instanz, oder den Kurznamen
des CAPTCHA Adapters nimmt:
</para>
<programlisting language="php"><![CDATA[
// Konkrete Instanz:
$element->setCaptcha(new Zend_Captcha_Figlet());
// Verwendung von Kurznamen:
$element->setCaptcha('Dumb');
]]></programlisting>
<para>
Wenn das Element über die Konfiguration geladen werden soll, kann entweder der Schlüssel
'captcha' mit einem Array das den Schlüssel 'captcha' enthält spezifiziert werden, oder
beide Schlüssel 'captcha' und 'captchaOptions':
</para>
<programlisting language="php"><![CDATA[
// Verwendung eines einzelnen captcha Schlüssels:
$element = new Zend_Form_Element_Captcha('foo', array(
'label' => "Bitte verifizieren Sie das Sie menschlich sind",
'captcha' => array(
'captcha' => 'Figlet',
'wordLen' => 6,
'timeout' => 300,
),
));
// Verwendung von beiden, captcha und captchaOptions:
$element = new Zend_Form_Element_Captcha('foo', array(
'label' => "Bitte verifizieren Sie das Sie menschlich sind",
'captcha' => 'Figlet',
'captchaOptions' => array(
'captcha' => 'Figlet',
'wordLen' => 6,
'timeout' => 300,
),
));
]]></programlisting>
<para>
Der verwendete Dekorator wird durch die Abfrage des Captcha Adapters erkannt.
Standardmäßig wird der <link linkend="zend.form.standardDecorators.captcha">Captcha
Dekorator</link> verwendet, aber ein Adapter kann einen anderen über die
<methodname>getDecorator()</methodname> Methode spezifizieren.
</para>
<para>
Wie beschrieben, fungiert der Captcha Adapter selbst als Prüfnug für das Element.
Zusätzlich wird die NotEmpty Prüfung nicht verwendet, und das Element wird als benötigt
markiert. In den meisten Fällen sollte sonst nichts anderes mehr notwendig sein um das
Captcha im eigenen Formular zu haben.
</para>
</sect2>
<sect2 id="zend.form.standardElements.checkbox">
<title>Zend_Form_Element_Checkbox</title>
<para>
<acronym>HTML</acronym> Checkboxen erlauben es spezifische Werte zurückzugeben, arbeiten
aber grundsätzlich als Boolean. Wenn Sie angehackt sind, wird der Wert der Checkbox
übertragen. Wenn Sie nicht angehackt sind, wird nichts übertragen. Intern erzwingt
<classname>Zend_Form_Element_Checkbox</classname> diesen Status.
</para>
<para>
Standardmäßg ist der angehackte Wert '1', und der nicht angehackte Wert '0'. Dieser
Wert kann spezifiziert werden indem die <methodname>setCheckedValue()</methodname> und
<methodname>setUncheckedValue()</methodname> Zugriffsmethoden verwendet werden. Intern
wird, jedesmal wenn der Wert gesetzt wird, wenn der angebotene Wert dem angehackten Wert
entspricht, er gesetzt, aber jeder andere Wert bewirkt das der nicht angehackte Wert
gesetzt wird.
</para>
<para>
Zusätzlich setzt, das Setzen des Werte, die <property>checked</property> Eigenschaft der
Checkbox. Das kann abgefragt werden indem <methodname>isChecked()</methodname> verwendet
wird oder einfach auf die Eigenschaft zugegriffen wird. Das Verwenden der
<methodname>setChecked($flag)</methodname> Methode setzt beides, den Status des Flags
sowie den entsprechenden gecheckten oder nicht gecheckten Wert im Element. Bitte
verwenden Sie diese Methode wenn der gecheckte Status eines Checkbox Elements gesetzt
wird um sicherzustellen das der Wert richtig gesetzt wird.
</para>
<para>
<classname>Zend_Form_Element_Checkbox</classname> verwendet den 'formCheckbox' View
Helfer. Der angehackte Wert wird immer verwendet um Sie zu veröffentlichen.
</para>
</sect2>
<sect2 id="zend.form.standardElements.file">
<title>Zend_Form_Element_File</title>
<para>
Das File Formularelement bietet einen Mechanismus um File Upload-felder in eigenen
Formularen zu Unterstützen. Es verwendet intern
<link linkend="zend.file.transfer.introduction">Zend_File_Transfer</link> um diese
Funktionalität zu bieten, und den <classname>FormFile</classname> Viewhelfer sowie den
<classname>File</classname> Decorator um das Formularelement anzuzeigen.
</para>
<para>
Standardmäßig verwendet es den <classname>Http</classname> Transferadapter, welcher das
<varname>$_FILES</varname> Array prüft und es erlaubt Prüfungen und Filter hinzuzufügen.
Prüfungen und Filter die dem Formularelement hinzugefügt werden, werden dem
Transferadapter hinzugefügt.
</para>
<example id="zend.form.standardElements.file.usage">
<title>Verwendung des File Formularelements</title>
<para>
Die obige Erklärung der Verwendung des File Formularelements mag geheimnisvoll
erscheinen, aber die aktuelle Verwendung ist relativ trivial:
</para>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_File('foo');
$element->setLabel('Ein Bild hochladen:')
->setDestination('/var/www/upload');
// Nur 1 Datei sicherstellen
$element->addValidator('Count', false, 1);
// Maximal 100k
$element->addValidator('Size', false, 102400);
// Nur JPEG, PNG, und GIFs
$element->addValidator('Extension', false, 'jpg,png,gif');
$form->addElement($element, 'foo');
]]></programlisting>
<para>
Man sollte auch den richtigen Encodingtyp sicherstellen in dem das Formular
angeboten wird. Das kann getan werden indem das 'enctype' Attribut des Formulars
gesetzt wird:
</para>
<programlisting language="php"><![CDATA[
$form->setAttrib('enctype', 'multipart/form-data');
]]></programlisting>
<para>
Nachdem das Formular erfolgreich geprüft wurde, muß die Datei empfangen werden um
Sie an Ihrem endgültigen Ziel zu speichern indem <methodname>receive()</methodname>
verwendet wird. Zusätzlich kann man das endgültige Ziel ermittelt werden indem
<methodname>getFileName()</methodname> verwendet wird:
</para>
<programlisting language="php"><![CDATA[
if (!$form->isValid()) {
print "Uh oh... Prüfungsfehler";
}
if (!$form->foo->receive()) {
print "Fehler beim Empfangen der Datei";
}
$location = $form->foo->getFileName();
]]></programlisting>
</example>
<note>
<title>Standardmäßige Ablage von Uploads</title>
<para>
Standardmäßig werden Dateien in das Temp Verzeichnis des Systems hochgeladen.
</para>
</note>
<note>
<title>Datei Werte</title>
<para>
In <acronym>HTTP</acronym> hat das File Element keinen Wert. Aus diesem Grund, und
aus Gründen der Sicherheit erhält gibt <methodname>getValue()</methodname> nur den
Dateinamen der hochgeladenen Datei zurück und nicht den kompletten Pfad. Wenn man
die kompletten Informationen benötigt kann <methodname>getFileName()</methodname>
aufgerufen werden, welches sowohl den Pfad als auch den Namen der Datei zurückgibt.
</para>
</note>
<para>
Standardmäßig wird die Datei automatisch empfangen wenn man
<methodname>getValues()</methodname> auf dem Formular aufruft. Der Grund hinter diesem
Verhalten ist, das die Datei selbst der Wert des File Elements ist.
</para>
<programlisting language="php"><![CDATA[
$form->getValues();
]]></programlisting>
<note>
<para>
Deshalb hat ein weiterer Aufruf von <methodname>receive()</methodname> nach dem
Aufruf von <methodname>getValues()</methodname> keinen Effekt. Auch die Erstellung
einer Instanz von <classname>Zend_File_Transfer</classname> wird keinen Effekt haben
da es keine weitere Datei zum Empfangen gibt.
</para>
</note>
<para>
Trotzdem kann es manchmal gewünscht sein <methodname>getValues()</methodname> aufzurufen
ohne das die Datei empfangen wird. Man kann dies erreichen indem
<methodname>setValueDisabled(true)</methodname> aufgerufen wird. Um den aktuellen Wert
dieses Flags zu erhalten kann man <methodname>isValueDisabled()</methodname> aufrufen.
</para>
<example id="zend.form.standardElements.file.retrievement">
<title>Datei explizit empfangen</title>
<para>
Zuerst <methodname>setValueDisabled(true)</methodname> aufrufen.
</para>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_File('foo');
$element->setLabel('Ein Bild hochladen:')
->setDestination('/var/www/upload')
->setValueDisabled(true);
]]></programlisting>
<para>
Jetzt wird die Datei nicht mehr empfangen wenn man
<methodname>getValues()</methodname> aufruft. Man muß also
<methodname>receive()</methodname> vom Datei Element, oder einer Instanz von
<classname>Zend_File_Transfer</classname> selbst aufrufen.
</para>
<programlisting language="php"><![CDATA[
$values = $form->getValues();
if ($form->isValid($form->getPost())) {
if (!$form->foo->receive()) {
print "Upload Fehler";
}
}
]]></programlisting>
</example>
<para>
Es gibt verschiedene Stati von hochgeladenen Dateien welche mit den folgenden Optionen
geprüft werden können:
</para>
<itemizedlist>
<listitem>
<para>
<methodname>isUploaded()</methodname>: Prüft ob das Dateielement hochgeladen
wurde oder nicht.
</para>
</listitem>
<listitem>
<para>
<methodname>isReceived()</methodname>: Prüft ob das Dateielement bereits
empfangen wurde.
</para>
</listitem>
<listitem>
<para>
<methodname>isFiltered()</methodname>: Prüft ob die Filter bereits dem
Dateielement angehängt wurden oder nicht.
</para>
</listitem>
</itemizedlist>
<example id="zend.form.standardElements.file.isuploaded">
<title>Prüfen ob eine optionale Datei hochgeladen wurde</title>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_File('foo');
$element->setLabel('Ein Bild hochladen:')
->setDestination('/var/www/upload')
->setRequired(false);
$element->addValidator('Size', false, 102400);
$form->addElement($element, 'foo');
// Das foo Dateielement is optional, aber wenn es angegeben wurde, gehe hier herein
if ($form->foo->isUploaded()) {
// Die foo Datei ist angegeben... mach was
}
]]></programlisting>
</example>
<para>
<classname>Zend_Form_Element_File</classname> unterstützt auch mehrere Dateien. Durch
den Aufruf der <methodname>setMultiFile($count)</methodname> Methode kann die Anzahl an
File Elementen die man erstellen will festgelegt werden. Das verhindert das die selben
Einstellungen mehrere Male durchgeführt werden müssen.
</para>
<example id="zend.form.standardElements.file.multiusage">
<title>Mehrere Dateien setzen</title>
<para>
Die Erstellung eines Multifile Elements ist das gleiche wie das Erstellen eines
einzelnen Elements. Man muß nur <methodname>setMultiFile()</methodname> aufrufen
nachdem das Element erstellt wurde:
</para>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_File('foo');
$element->setLabel('Ein Bild hochladen:')
->setDestination('/var/www/upload');
// Mindestens 1 und maximal 3 Dateien sicherstellen
$element->addValidator('Count', false, array('min' => 1, 'max' => 3));
// Auf 100k limitieren
$element->addValidator('Size', false, 102400);
// Nur JPEG, PNG, und GIFs
$element->addValidator('Extension', false, 'jpg,png,gif');
// 3 identische Dateielemente definieren
$element->setMultiFile(3);
$form->addElement($element, 'foo');
]]></programlisting>
<para>
In der View erhält man nun 3 identische File Upload Elemente welche alle die
gleichen Einstellungen verwenden. Um die Multifile Anzahl zu erhalten kann man
einfach <methodname>getMultiFile()</methodname> aufrufen.
</para>
</example>
<note>
<title>File Elemente in Subformularen</title>
<para>
Wenn File Elemente in Subformularen verwendet werden muß man eindeutige Namen
setzen. Wenn man zum Beispiel ein File Element in Subform1 "file" benennt, muß es in
Subform2 einen anderen Namen erhalten.
</para>
<para>
Sobald es 2 identisch benannte File Elemente gibt, wird das zweite Element entweder
nicht dargestellt oder nicht übertragen.
</para>
<para>
Zusätzlich werden File Element nicht im Unterformulat dargestellt. Wenn man also ein
File Element in einem Unterformulat hinzufügt, wird das Element im Hauptformular
dargestellt.
</para>
</note>
<para>
Um die Größe der Datei zu begrenzen, kann die maximale
Dateigröße spezifiziert werden indem die <constant>MAX_FILE_SIZE</constant> Option im
Formular gesetzt wird. Sobald der Wert, durch die Verwendung der
<methodname>setMaxFileSize($size)</methodname> Methode, gesetzt ist, wird er mit dem
File Element dargestellt.
</para>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_File('foo');
$element->setLabel('Ein Bild hochladen:')
->setDestination('/var/www/upload')
->addValidator('Size', false, 102400) // Limitiert auf 100k
->setMaxFileSize(102400); // Limitiert die Dateigröße auf der Clientseite
$form->addElement($element, 'foo');
]]></programlisting>
<note>
<title>MaxFileSize mit mehreren File Elementen</title>
<para>
Wenn mehrere File Elemente im Formular verwendet werden sollte man
<constant>MAX_FILE_SIZE</constant> nur einmal setzen. Wird es nochmals gesetzt
überschreibt es den vorherigen Wert.
</para>
<para>
Beachte, dass das auch der Fall ist wenn man mehrere Formulare verwendet.
</para>
</note>
</sect2>
<sect2 id="zend.form.standardElements.hidden">
<title>Zend_Form_Element_Hidden</title>
<para>
Versteckte Elemente fügen Daten ein die übertragen werden sollen, welche der Benutzer
aber nicht manipulieren soll. <classname>Zend_Form_Element_Hidden</classname> ermöglicht
das mit dem 'formHidden' View Helfers.
</para>
</sect2>
<sect2 id="zend.form.standardElements.hash">
<title>Zend_Form_Element_Hash</title>
<para>
Dieses Element bietet Schutz vor CSRF Attacken auf Forms, und stellt sicher das die
Daten die übertragen werden von der Benutzersession stammen welche die Form erstellt hat
und nicht durch ein bösartiges Skript. Sicherheit wird ermöglicht durch das hinzufügen
eines Hash Elements zur form und dessen Prüfung wenn die Form übermittelt wird.
</para>
<para>
Der Name des Hash Elements sollte einmalig sein. Wir emphehlen die Verwendung der
<literal>salt</literal> Option für das Element- damit zwei Hashes mit dem gleichen
Namen und unterschiedlichen Salts nicht kollidieren:
</para>
<programlisting language="php"><![CDATA[
$form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));
]]></programlisting>
<para>
Das Salt kann später gesetzt werden durch Verwendung der
<methodname>setSalt($salt)</methodname> Methode.
</para>
<para>
Intern speichert das Element einen eindeutigen Identifikator indem es
<classname>Zend_Session_Namespace</classname> verwendet, und danach bei der Übertragung
checkt (es wird geprüft das die TTL nicht abgelaufen ist). Die 'Identical' Prüfung wird
Internally, the element stores a unique identifier using
<classname>Zend_Session_Namespace</classname>, and checks for it at
submission (checking that the TTL has not expired). The 'Identical'
validator is then used to ensure the submitted hash matches the
stored hash.
</para>
<para>
Der 'formHidden' View Helfer wird verwendet um das Element in der Form darzustellen.
</para>
</sect2>
<sect2 id="zend.form.standardElements.Image">
<title>Zend_Form_Element_Image</title>
<para>
Bilder können als Form Elemente verwendet werden und man kann diese Bilder als
graphische Elemente auf Form Buttons verwenden.
</para>
<para>
Bilder benötigen eine Bildquelle. <classname>Zend_Form_Element_Image</classname> erlaube
dessen Spezifikation durch Verwendung der <methodname>setImage()</methodname>
Zugriffsmethode (oder des 'image' Konfigurations Schlüssels). Es kann auch optional ein
Wert spezifiziert werden der zu verwenden ist wenn das Bild übertragen wird indem die
Zugriffsmethode <methodname>setImageValue()</methodname> verwendet wird (oder der
'imageValue Konfigurations Schlüssel). Wenn der Wert der für das Element gesetzt ist,
mit <property>imageValue</property> übereinstimmt, gibt
<methodname>isChecked()</methodname> <constant>TRUE</constant> zurück.
</para>
<para>
Bild Elemente verwenden den
<link linkend="zend.form.standardDecorators.image">Image Decorator</link> für die
Darstellung, zusätzlich zu den Standard Error, HtmlTag und Label Dekoratoren. Es kann
optional ein Tag für den <classname>Image</classname> Dekorator spezifiziert werden der
das Bild einbettet.
</para>
</sect2>
<sect2 id="zend.form.standardElements.multiCheckbox">
<title>Zend_Form_Element_MultiCheckbox</title>
<para>
Oft hat man ein Set von zusammenhängenden Checkboxen, und die Ergebnisse sollen
gruppiert werden. Das ist so ähnlich wie
<link linkend="zend.form.standardElements.multiselect">Multiselect</link> aber statt
das Sie in einer DropDown Liste sind, müssen Checkbox/Werte Paare dargestellt werden.
</para>
<para>
<classname>Zend_Form_Element_MultiCheckbox</classname> macht das in einem Rutsch. Wie
alle anderen Elemente kann mit der Erweiterung des Basis MultiElements eine Liste von
Optionen spezifiziert werden und einfach gegen die selbe Liste geprüft werden. Der
'formMultiCheckbox' View Helfer stellt sicher das Sie als Array bei der Übermittlung
der Form zurückgegeben werden.
</para>
<para>
Standardmäßig registriert dieses Element die <classname>InArray</classname> Prüfung
welche gegen Arrayschlüssel von registrierten Optionen prüft. Dieses Verhalten kann
deaktiviert werden indem entweder
<methodname>setRegisterInArrayValidator(false)</methodname> aufgerufen, oder indem ein
<constant>FALSE</constant> Wert an den <property>registerInArrayValidator</property>
Konfigurationsschlüssel übergeben wird.
</para>
<para>
Die verschiedenen Checkbox Optionen können mit den folgenden Methoden manipuliert
werden:
</para>
<itemizedlist>
<listitem>
<para><methodname>addMultiOption($option, $value)</methodname></para>
</listitem>
<listitem>
<para><methodname>addMultiOptions(array $options)</methodname></para>
</listitem>
<listitem>
<para>
<methodname>setMultiOptions(array $options)</methodname> (überschreibt
existierende Optionen)
</para>
</listitem>
<listitem><para><methodname>getMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>getMultiOptions()</methodname></para></listitem>
<listitem><para><methodname>removeMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>clearMultiOptions()</methodname></para></listitem>
</itemizedlist>
<para>
Um gecheckte Elemente zu markieren, muß ein Array an Werte an
<methodname>setValue()</methodname> übergeben werden. Der folgende Code prüft die Werte
"bar" und "bat":
</para>
<programlisting language="php"><![CDATA[
$element = new Zend_Form_Element_MultiCheckbox('foo', array(
'multiOptions' => array(
'foo' => 'Foo Option',
'bar' => 'Bar Option',
'baz' => 'Baz Option',
'bat' => 'Bat Option',
)
));
$element->setValue(array('bar', 'bat'));
]]></programlisting>
<para>
Beachte das man auch für das Setzen eines einzelnen Wertes ein Array übergeben muß.
</para>
</sect2>
<sect2 id="zend.form.standardElements.multiselect">
<title>Zend_Form_Element_Multiselect</title>
<para>
<acronym>XHTML</acronym> <emphasis>select</emphasis> Elemente erlaube ein 'multiple'
Attribut, das zeigt das mehrere Optionen für die Übermittlung ausgewählt werden können,
statt normalerweise nur eines. <classname>Zend_Form_Element_Multiselect</classname>
erweitert <link
linkend="zend.form.standardElements.select">Zend_Form_Element_Select</link> und
setzt das <property>multiple</property> Attribut auf 'multiple'. Wie andere Klassen die
von der Basisklasse <classname>Zend_Form_Element_Multi</classname> abgeleitet werden,
können die Optionen für die Auswahl wie folgt verändert werden:
</para>
<itemizedlist>
<listitem>
<para><methodname>addMultiOption($option, $value)</methodname></para>
</listitem>
<listitem>
<para><methodname>addMultiOptions(array $options)</methodname></para>
</listitem>
<listitem>
<para>
<methodname>setMultiOptions(array $options)</methodname>
(überschreibt existierende Optionen)
</para>
</listitem>
<listitem><para><methodname>getMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>getMultiOptions()</methodname></para></listitem>
<listitem><para><methodname>removeMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>clearMultiOptions()</methodname></para></listitem>
</itemizedlist>
<para>
Wenn ein Übersetzungs Adapter in der Form und/oder dem Element registriert ist,
werden Optionswerte für Darstellungzwecke übersetzt.
</para>
<para>
Standardmäßig registriert dieses Element die <classname>InArray</classname> Prüfung
welche gegen Arrayschlüssel von registrierten Optionen prüft. Dieses Verhalten kann
deaktiviert werden indem entweder
<methodname>setRegisterInArrayValidator(false)</methodname> aufgerufen, oder indem ein
<constant>FALSE</constant> Wert an den <property>registerInArrayValidator</property>
Konfigurationsschlüssel übergeben wird.
</para>
</sect2>
<sect2 id="zend.form.standardElements.password">
<title>Zend_Form_Element_Password</title>
<para>
Passwort Element sind grundsätzlich normale Textelemente -- ausser das typischerweise
das eingegebene Passwort nicht in Fehlermeldungen oder dem Element selbst angezeigt
werden soll wenn die Form normals angezeigt wird.
</para>
<para>
<classname>Zend_Form_Element_Password</classname> ermöglicht das durch den Aufruf von
<methodname>setObscureValue(true)</methodname> auf jeder Prüfung (und stellt sicher das
das Passwort in der Prüfungs Fehlermeldung verschleiert wird), und verwendet den
'formPassword' View Helfer (welcher den an Ihn übergebenen Wert nicht anzeigt).
</para>
</sect2>
<sect2 id="zend.form.standardElements.radio">
<title>Zend_Form_Element_Radio</title>
<para>
Radio Elemente erlauben es verschiedene Optionen zu spezifizieren, von denen ein
einzelner Wert zurückgegeben wird. <classname>Zend_Form_Element_Radio</classname>
erweitert die Basisklasse <classname>Zend_Form_Element_Multi</classname> und erlaubt es
eine Anzahl von Optionen zu spezifizieren, und verwendet dann den
<emphasis>formRadio</emphasis> View Helfer um diese darzustellen.
</para>
<para>
Standardmäßig registriert dieses Element die <classname>InArray</classname> Prüfung
welche gegen Arrayschlüssel von registrierten Optionen prüft. Dieses Verhalten kann
deaktiviert werden indem entweder
<methodname>setRegisterInArrayValidator(false)</methodname> aufgerufen, oder indem ein
<constant>FALSE</constant> Wert an den <property>registerInArrayValidator</property>
Konfigurationsschlüssel übergeben wird.
</para>
<para>
Wie alle Elemente welche die Basisklasse des Multl Elements erweitern, können die
folgenden Methode verwendet werden um die Radio Optionen zu manipulieren die angezeigt
werden:
</para>
<itemizedlist>
<listitem>
<para><methodname>addMultiOption($option, $value)</methodname></para>
</listitem>
<listitem>
<para><methodname>addMultiOptions(array $options)</methodname></para>
</listitem>
<listitem>
<para>
<methodname>setMultiOptions(array $options)</methodname> (überschreibt
existierende Optionen)
</para>
</listitem>
<listitem><para><methodname>getMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>getMultiOptions()</methodname></para></listitem>
<listitem><para><methodname>removeMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>clearMultiOptions()</methodname></para></listitem>
</itemizedlist>
</sect2>
<sect2 id="zend.form.standardElements.reset">
<title>Zend_Form_Element_Reset</title>
<para>
Reset Buttons werden typischerweise verwendet um eine Form zu löschen, und sind nicht
Teil der übermittelten Daten. Da Sie trotzdem einen Zweck in der Anzeige bieten, sind
Sie in den Standardelementen enthalten.
</para>
<para>
<classname>Zend_Form_Element_Reset</classname> erweitert
<link linkend="zend.form.standardElements.submit">Zend_Form_Element_Submit</link>.
Deswegen wird das Label für die Anzeige des Buttons verwendet und wird übersetzt
wenn ein Übersetzungs Adapter vorhanden ist. Es verwendet nur die 'ViewHelper' und
'DtDdWrapper' Dekoratore, da es nie Fehlermeldungen für solche Elemente geben sollte,
noch sollte ein Label notwendig sein.
</para>
</sect2>
<sect2 id="zend.form.standardElements.select">
<title>Zend_Form_Element_Select</title>
<para>
Auswahlboxen sind der übliche Weg um spezielle Auswahlen für gegebene Formdaten zu
begrenzen. <classname>Zend_Form_Element_Select</classname> erlaubt es diese schnell und
einfach zu erzeugen.
</para>
<para>
Standardmäßig registriert dieses Element die <classname>InArray</classname> Prüfung
welche gegen Arrayschlüssel von registrierten Optionen prüft. Dieses Verhalten kann
deaktiviert werden indem entweder
<methodname>setRegisterInArrayValidator(false)</methodname> aufgerufen, oder indem ein
<constant>FALSE</constant> Wert an den <property>registerInArrayValidator</property>
Konfigurationsschlüssel übergeben wird.
</para>
<para>
Da es das Basis Multielement erweitert, können die folgenden Methoden verwendet werden
um die Auswahloptionen zu manipulieren:
</para>
<itemizedlist>
<listitem>
<para><methodname>addMultiOption($option, $value)</methodname></para>
</listitem>
<listitem>
<para><methodname>addMultiOptions(array $options)</methodname></para>
</listitem>
<listitem>
<para>
<methodname>setMultiOptions(array $options)</methodname>
(überschreibt existierende Optionen)
</para>
</listitem>
<listitem><para><methodname>getMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>getMultiOptions()</methodname></para></listitem>
<listitem><para><methodname>removeMultiOption($option)</methodname></para></listitem>
<listitem><para><methodname>clearMultiOptions()</methodname></para></listitem>
</itemizedlist>
<para>
<classname>Zend_Form_Element_Select</classname> verwendet den 'formSelect' View Helfer
für die Dekoration.
</para>
</sect2>
<sect2 id="zend.form.standardElements.submit">
<title>Zend_Form_Element_Submit</title>
<para>
Sendebuttons (Submit) werden verwendet um eine Form zu senden. Es kann gewünscht sein
mehrere Sendebuttons zu verwendetn; die Buttons zur Übermittlung der Form können
verwendet werden um auszuwählen welche Aktion mit den übermittelten Daten genommen
werden soll. <classname>Zend_Form_Element_Submit</classname> macht die Entscheidung
einfach, durch das Hinzufügen einer <methodname>isChecked()</methodname> Methode; da nur
ein Button Element von der Form übermittelt wird, nachdem die Form übermittelt oder
geprüft wurde, kann diese Methode auf jedem Sendebutton ausgerufen werden um
festzustellen welcher verwendet wurde.
</para>
<para>
<classname>Zend_Form_Element_Submit</classname> verwendet das Label als den "Wert" des
Sendebuttons, und übersetzt es wenn ein Übersetzungsadapter vorhanden ist.
<methodname>isChecked()</methodname> prüft den übermittelten Wert gegen das Label um
festzustellen ob der Button verwendet wurde.
</para>
<para>
Die <link linkend="zend.form.standardDecorators.viewHelper">ViewHelper</link> und
<link linkend="zend.form.standardDecorators.dtDdWrapper">DtDdWrapper</link> Dekoratore
werden verwendet um das Element darzustellen. Es wird kein Labeldekorator verwendet, da
das Label des Buttons verwendet wird wenn das Element dargestellt wird; typischerweise
werden acuh keine Fehler mit einem Sendeelement assoziiert.
</para>
</sect2>
<sect2 id="zend.form.standardElements.text">
<title>Zend_Form_Element_Text</title>
<para>
Der nützlichste Typ von Form Element ist das Text Element, das begrenzte Texteinträge
erlaubt; es ist ein ideales Element für die meisten Dateneinträge.
<classname>Zend_Form_Element_Text</classname> verwendet einfach den 'formText' View
Helfer um das Element darzustellen.
</para>
</sect2>
<sect2 id="zend.form.standardElements.textarea">
<title>Zend_Form_Element_Textarea</title>
<para>
Textbereiche werden verwendet wenn große Mengen von Text erwartet werden, und keine
Begrenzung in der Anzahl des übermittelten Textes vorhanden sind (anders als das Limit
der Maximalgröße wie vom Server von <acronym>PHP</acronym> diktiert).
<classname>Zend_Form_Element_Textarea</classname> verwendet den 'textArea' View Helfer
um solche Element darzustellen, und platziert den Wert als Inhalt des Elements.
</para>
</sect2>
</sect1>
|