| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 22741 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.form.forms">
- <title>Erstellen von Form durch Verwendung von Zend_Form</title>
- <para>
- Die <classname>Zend_Form</classname> Klasse wird verwendet um Form Element, Anzeigegruppen
- und Unterforms zu gruppieren. Sie kann die folgenden Aktionen an diesen Elementen vornehmen:
- </para>
- <itemizedlist>
- <listitem>
- <para>Prüfung, inklusive dem Empfang von Fehlercodes und Meldungen</para>
- </listitem>
- <listitem>
- <para>
- Werte behandeln, inklusive der Übermittlung von Elementen und dem Empfangen von
- beiden, gefilterten und ungefilterten Werten, von allen Elementen
- </para>
- </listitem>
- <listitem>
- <para>
- Iteration über alle Elemente in der Reihenfolge in der Sie eingegeben wurden oder
- basierend auf der Reihenfolge in der Hinweise von jedem Element empfangen werden
- </para>
- </listitem>
- <listitem>
- <para>
- Darstellung der kompletten Form, antweder über einen eigenen Dekorator der eigene
- Darstellungen durchführt oder durch die Iterierung über jedes Element in der Form
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Wärend Formen die mit <classname>Zend_Form</classname> erstellt werden komplex sein können,
- ist der warscheinlich beste Verwendungzweck eine einfache Form; die beste Verwendung ist für
- Rapid Application Development (RAD) und Prototyping.
- </para>
- <para>
- In der einfachsten Art, wird einfach ein Form Objekt instanziert:
- </para>
- <programlisting language="php"><![CDATA[
- // Generelles Form Objekt:
- $form = new Zend_Form();
- // Eigenes Form Objekt:
- $form = new My_Form()
- ]]></programlisting>
- <para>
- Es kann optional eine Instanz von <classname>Zend_Config</classname> oder ein Array
- übergeben werden, welches verwendet wird um den Status des Objektes zu setzen sowie
- potentiell neue Elemente zu erstellen:
- </para>
- <programlisting language="php"><![CDATA[
- // Konfigurations Optionen übergeben:
- $form = new Zend_Form($config);
- ]]></programlisting>
- <para>
- <classname>Zend_Form</classname> ist iterierbar und iteriert durch die Elemente,
- Anzeigegruppen und Subforms, indem es die Reihenfolge in der diese registriert wurde
- verwendet und jede Reihenfolge die der Index hat. Das ist nützlich in den Fällen in denen
- Elemente manuell in einer bestimmten Reihenfolge dargestellt werden sollen.
- </para>
- <para>
- <classname>Zend_Form</classname>'s Magie liegt in der Fähigkeit als Factory für Elemente und
- Anzeigegruppen zu arbeiten, genauso wie die Fähigkeit sich selbst durch Dekoratore
- darzustellen.
- </para>
- <sect2 id="zend.form.forms.plugins">
- <title>Plugin Loader</title>
- <para>
- <classname>Zend_Form</classname> verwendet
- <classname>Zend_Loader_PluginLoader</classname> um es Entwicklern zu erlauben Orte von
- alternativen Elementen und Dekoratoren zu spezifizieren. Jeder hat seinen eigenen mit
- Ihm assoziierten Plugin Loader, und generelle Zugriffspunkte werden verwendet um jeden
- zu empfangen und zu ändern.
- </para>
- <para>
- Die folgenden Loadertypen werden mit den verschiedenen Plugin Loader Methoden
- verwendet: 'element' und 'decorator'. Die Typnamen sind unabhängig von der
- Schreibweise.
- </para>
- <para>
- Die Methoden um mit Plugin Loader zu interagieren sind die folgenden:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setPluginLoader($loader, $type)</methodname>: $loader ist das Plugin
- Loader Objekt selbst. Das setzt den Plugin Loader für den gegebenen Typ zu dem
- neu spezifizierten Loader Objekt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getPluginLoader($type)</methodname>: Empfängt den mit $type
- assoziierten Plugin Loader.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addPrefixPath($prefix, $path, $type = null)</methodname>: Fügt eine
- Präfix/Pfad Assoziation zum durch $type spezifizierten Loader hinzu. Wenn $type
- <constant>NULL</constant> ist, versucht es den Pfad allen Loadern hinzuzufügen,
- durch anhängen des Präfix an jedes "_Element" und "_Decorator"; und anhängen des
- Pfades an "Element/" und "Decorator/". Wenn man alle Extra Form Elementklassen
- in einer normalen Hierarchie sind, ist das die übliche Methode für das Setzen
- eines Basispräfix für Sie.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addPrefixPaths(array $spec)</methodname>: Erlaubt es viele Pfade auf
- einmal zu einem oder mehreren Plugin Loadern hinzuzufügen. Sie erwartet das
- jedes Array Element ein Array mit den Schlüsseln 'path', 'prefix' und 'type'
- ist.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Zusätzlich kann ein Präfixpfad für alle Elemente und Anzeigegruppen die durch eine
- <classname>Zend_Form</classname> Instanz erstellt wurden, spezifiziert werden, durch
- Verwendung der folgenden Methoden:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addElementPrefixPath($prefix, $path, $type = null)</methodname>: Wie
- <methodname>addPrefixPath()</methodname>, nur das ein Klassenpräfix und ein Pfad
- spezifiziert werden muß. Wenn <varname>$type</varname> spezifiziert wurde, muß
- er einer der Plugin Loader Typen sein die in
- <classname>Zend_Form_Element</classname> spezifiziert sind; siehe das <link
- linkend="zend.form.elements.loaders">Kapitel Element Plugins</link> für
- weitere Informationen über gültige <varname>$type</varname> Werte. Wenn kein
- <varname>$type</varname> spezifiziert wurde, nimmt diese Methode an das ein
- genereller Präfix für alle Typen spezifiziert wurde.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addDisplayGroupPrefixPath($prefix, $path)</methodname>: Wie
- <methodname>addPrefixPath()</methodname> nur das Klassenpräfix und ein Pfad
- spezifiziert werden muß; Trotzdem, da Anzeigegruppen nur Dekoratore als Plugin
- unterstützen, ist kein <varname>$type</varname> notwendig.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Eigene Elemente und Dekoratore sind ein einfacher Weg um Funktionalitäten zwischen
- Forms zu teilen und eigene Funktionalitäten zu kapseln. Siehe das
- <link linkend="zend.form.elements.loaders.customLabel">Eigene Label Beispiel</link> in
- der Dokumentation über Elemente als Beispiel dafür, wie eigene Elemente als Ersatz für
- Standardklassen verwendet werden können.
- </para>
- </sect2>
- <sect2 id="zend.form.forms.elements">
- <title>Elemente</title>
- <para>
- <classname>Zend_Form</classname> bietet verschiedene Zugriffsmethoden für das Hinzufügen
- und Entfernen von Elementen aus einer Form. Diese können Instanzen von Elemente Objekten
- nehmen oder als Factories für das Instanzieren der Element Objekte selbe herhalten.
- </para>
- <para>
- Die grundsätzlichste Methode für das Hinzufügen eines Elements ist
- <methodname>addElement()</methodname>. Diese Methode kann entweder ein Objekt vom Typ
- <classname>Zend_Form_Element</classname> sein (oder einer Klasse die
- <classname>Zend_Form_Element</classname> erweitert), oder Argumente für das Erstellen
- eines neuen Elements -- inklusive dem Elementtyp, Namen, und jegliche
- Konfigurationsoption.
- </para>
- <para>
- Einige Beispiele:
- </para>
- <programlisting language="php"><![CDATA[
- // Eine Instanz eines Elements verwenden:
- $element = new Zend_Form_Element_Text('foo');
- $form->addElement($element);
- // Eine Factory verwenden
- //
- // Erstellt ein Element von Typ Zend_Form_Element_Text mit dem
- // Namen 'foo':
- $form->addElement('text', 'foo');
- // Eine Label Option an das Element übergeben:
- $form->addElement('text', 'foo', array('label' => 'Foo:'));
- ]]></programlisting>
- <note>
- <title>addElement() implementiert das Fluent Interface</title>
- <para>
- <methodname>addElement()</methodname> implementiert das Fluent Interface; das heißt
- es gibt das <classname>Zend_Form</classname> Objekt zurück und nicht das Element.
- Das wird getan um es zu erlauben das mehrere addElement() Methoden gekettet werden
- können oder andere Methoden die das Fluent Interface implementieren (alle Setzer in
- <classname>Zend_Form</classname> implementieren dieses Pattern).
- </para>
- <para>
- Wenn das Element zurückgegeben werden soll, muß stattdessen
- <methodname>createElement()</methodname> verwendet werden, welches anbei beschrieben
- wird. Trotzdem vorsicht, da <methodname>createElement()</methodname> das Element
- nicht der Form hinzufügt.
- </para>
- <para>
- <methodname>addElement()</methodname> verwendet intern
- <methodname>createElement()</methodname> um das Element zu erstellen bevor es der
- Form hinzugefügt wird.
- </para>
- </note>
- <para>
- Sobald ein Element der Form hinzugefügt wurde, kann es durch den Namen empfangen
- werden. Das kann entweder durch die Verwendung der <methodname>getElement()</methodname>
- Methode, oder durch Verwendung von Überladen um auf das Element als Objekteigenschaft
- zuzugreifen:
- </para>
- <programlisting language="php"><![CDATA[
- // getElement():
- $foo = $form->getElement('foo');
- // Als Objekteigenschaft:
- $foo = $form->foo;
- ]]></programlisting>
- <para>
- Fallweise, will man ein Element erstellen ohne es einer Form hinzuzufügen (zum
- Beispiel, wenn man die verschiedenen Plugin Pfade verwenden, aber das Objekt später zu
- einer Subform hinzufügen will). Die <methodname>createElement()</methodname> Methode
- erlaubt das:
- </para>
- <programlisting language="php"><![CDATA[
- // $username wird ein Zend_Form_Element_Text Objekt:
- $username = $form->createElement('text', 'username');
- ]]></programlisting>
- <sect3 id="zend.form.forms.elements.values">
- <title>Werte bekanntgeben und empfangen</title>
- <para>
- Nach der Prüfung einer Form, will man typischerweise die Werte empfangen damit
- andere Operationen durchgeführt werden können, wie das Aktualisieren einer
- Datenbank oder der Abfrage eines Web Services. Es können alle Werte für alle
- Elemente empfangen werden durch Verwendung von <methodname>getValues()</methodname>;
- <methodname>getValue($name)</methodname> erlabt es ausserdem den Wert eines
- einzelnen Elements durch den Elementnamen zu erhalten:
- </para>
- <programlisting language="php"><![CDATA[
- // Alle Werte erhalten:
- $values = $form->getValues();
- // Nur den Wert des 'foo' Elements erhalten:
- $value = $form->getValue('foo');
- ]]></programlisting>
- <para>
- Manchmal soll die Form mit spezifizierten Werte veröffentlicht werden bevor Sie
- dargestellt wird. Das kann entweder mit den <methodname>setDefaults()</methodname>
- oder <methodname>populate()</methodname> Methoden getan werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setDefaults($data);
- $form->populate($data);
- ]]></programlisting>
- <para>
- Auf der anderen Seiten kann es gewünscht sein ein Formular, nach der Übertragung
- oder der Prüfung, zu löschen; das kann durch Verwendung der
- <methodname>reset()</methodname> Methode durchgeführt werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form->reset();
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.form.forms.elements.global">
- <title>Globale Operationen</title>
- <para>
- Fallweise wird man wollen das bestimmte Operationen alle Elemente beeinflussen.
- Übliche Szenarien enthalten das Setzen des Plugin Präfix Pfades für alle Elemente,
- Setzen der Dekoratore für alle Elemente, und das setzen von Filtern für alle
- Elemente. Als Beispiel:
- </para>
- <example id="zend.form.forms.elements.global.allpaths">
- <title>Setzen von Präfix Pfaden für alle Elemente</title>
- <para>
- Präfix Pfade können für alle Elemente durch den Typ oder der Verwendung eines
- globalen Präfix gesetzt werden. Einige Beispiele:
- </para>
- <programlisting language="php"><![CDATA[
- // Einen gobalen Präfix setzen:
- // Erstellt Pfade für die Präfixe My_Foo_Filter, My_Foo_Validate,
- // und My_Foo_Decorator
- $form->addElementPrefixPath('My_Foo', 'My/Foo/');
- // Nur Filterpfade:
- $form->addElementPrefixPath('My_Foo_Filter',
- 'My/Foo/Filter',
- 'filter');
- // Nur Prüfungspfade:
- $form->addElementPrefixPath('My_Foo_Validate',
- 'My/Foo/Validate',
- 'validate');
- // Nur Dekoratorpfade:
- $form->addElementPrefixPath('My_Foo_Decorator',
- 'My/Foo/Decorator',
- 'decorator');
- ]]></programlisting>
- </example>
- <example id="zend.form.forms.elements.global.decorators">
- <title>Dekoratore für alle Elemente setzen</title>
- <para>
- Man kann Dekoratore für alle Elemente setzen.
- <methodname>setElementDecorators()</methodname> akzeptiert ein Array von
- Dekoratoren, wie <methodname>setDecorators()</methodname>, und überschreibt
- jeden vorher gesetzten Dekorator in jedem Element. In diesem Beispiel wird der
- Dekorator einfach auf einen ViewHelfer und ein Label gesetzt:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setElementDecorators(array(
- 'ViewHelper',
- 'Label'
- ));
- ]]></programlisting>
- </example>
- <example id="zend.form.forms.elements.global.decoratorsFilter">
- <title>Setzen von Dekoratoren für einige Elemente</title>
- <para>
- Man kann Dekoratore auch für ein Subset von Elementen setzen, entweder durch
- Ausbeziehung oder durch Ausgrenzung. Das zweite Argument von
- <methodname>setElementDecorators()</methodname> kann ein Array von Elementnamen
- sein; standardmäßig setzt so ein Array den spezifizierten Dekrator nur auf diese
- Elemente. Man kann auch einen dritten Parameter angeben, ein Flag das anzeigt ob
- diese Liste von Elementen einbezogen oder ausgegrenzt werden sollen. Wenn das
- Flag <constant>FALSE</constant> ist, werden alle Elemente dekoriert
- <emphasis>ausser</emphasis> denen die in der Liste übergeben wurden. Die normale
- Verwendung der Methode besteht darin, das alle übergebenen Dekoratore alle
- vorher gesetzten Dekoratore in jedem Element überschreiben.
- </para>
- <para>
- Im folgenden Schnipsel, sagen wir das wir nur die ViewHelper und Label
- Dekoratore für die 'foo' und 'bar' Elemente haben wollen:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setElementDecorators(
- array(
- 'ViewHelper',
- 'Label'
- ),
- array(
- 'foo',
- 'bar'
- )
- );
- ]]></programlisting>
- <para>
- Auf der anderen Seite zeigt dieses Schnipsel jetzt an das nur nur die ViewHelper
- und Label Dekoratore für jedes Element verwenden wollen
- <emphasis>ausgenommen</emphasis> die 'foo' und 'bar' Elemente:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setElementDecorators(
- array(
- 'ViewHelper',
- 'Label'
- ),
- array(
- 'foo',
- 'bar'
- ),
- false
- );
- ]]></programlisting>
- </example>
- <note>
- <title>Einige Dekoratore sind für einige Elemente ungeeignet</title>
- <para>
- Wärend <methodname>setElementDecorators()</methodname> wie eine gute Lösung
- ausschaut gibt es einige Fälle in denen es zu unerwarteten Ergebnissen führen
- kann. Zum Beispiel verwenden die verschiedenen Button Elemente (Submit, Button,
- Reset) aktuell das Label als Wert des Buttons, und verwenden nur den
- ViewHelper und DtDdWrapper Dekorator -- was zusätzliche Labels, Fehler und
- Hinweise für die Darstellung verhindert. Das obige Beispiel würde einige
- Inhalte (das Label) für Button Elemente duplizieren.
- </para>
- <para>
- Man kann das Enthalten/Ausnehmen Array verwenden um dieses Problem, wie im
- vorherigen Beispiel gezeigt, zu umgehen.
- </para>
- <para>
- Diese Methode sollte also weise verwendet werden und man sollte bedenken
- das man einige Dekoratore von Elementen händisch ändern muss damit
- ungewollte Ausgaben verhindert werden.
- </para>
- </note>
- <example id="zend.form.forms.elements.global.filters">
- <title>Filter für alle Elemente setzen</title>
- <para>
- In einigen Fällen will man den selben Filter auf alle Elemente anwenden; ein
- üblicher Fall ist es alle Werte zu <methodname>trim()</methodname>men:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setElementFilters(array('StringTrim'));
- ]]></programlisting>
- </example>
- </sect3>
- <sect3 id="zend.form.forms.elements.methods">
- <title>Methoden für die Interaktion mit Elementen</title>
- <para>
- Die folgenden Methoden können verwendet werden um mit Elementen zu interagieren:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>createElement($element, $name = null, $options =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addElement($element, $name = null, $options = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addElements(array $elements)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setElements(array $elements)</methodname></para>
- </listitem>
- <listitem><para><methodname>getElement($name)</methodname></para></listitem>
- <listitem><para><methodname>getElements()</methodname></para></listitem>
- <listitem><para><methodname>removeElement($name)</methodname></para></listitem>
- <listitem><para><methodname>clearElements()</methodname></para></listitem>
- <listitem>
- <para><methodname>setDefaults(array $defaults)</methodname></para>
- </listitem>
- <listitem><para><methodname>setDefault($name, $value)</methodname></para></listitem>
- <listitem><para><methodname>getValue($name)</methodname></para></listitem>
- <listitem><para><methodname>getValues()</methodname></para></listitem>
- <listitem><para><methodname>getUnfilteredValue($name)</methodname></para></listitem>
- <listitem><para><methodname>getUnfilteredValues()</methodname></para></listitem>
- <listitem>
- <para><methodname>setElementFilters(array $filters)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setElementDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem>
- <para>
- <methodname>addElementPrefixPath($prefix, $path, $type = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addElementPrefixPaths(array $spec)</methodname></para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.form.forms.displaygroups">
- <title>Anzeigegruppen</title>
- <para>
- Anzeigegruppen sind ein Weg um virtuell Gruppierungen von Elementen für Anzeigezwecke
- zu erstellen. Alle Elemente bleiben durch Ihren Namen in der Form zugreifbar, aber wenn
- die Form iteriert oder dargestellt wird, werden alle Elemente in Anzeigegruppen
- gemeinsam dargestellt. Üblicherweise wird das für die Gruppierung von Elementen in
- Fieldsets verwendet.
- </para>
- <para>
- Die Basisklasse für Anzeigegruppen ist <classname>Zend_Form_DisplayGroup</classname>.
- Wärend Sie direkt Instanziert werden kann, ist es normalerweise am besten die
- <methodname>addDisplayGroup()</methodname> Methode von <classname>Zend_Form</classname>
- zu verwenden um das zu erledigen. Diese Methode nimmt ein Array von Elementen als erstes
- Argument, und einen Namen für die Anzeigegruppe als zweites Argument. Es kann optional
- ein Array von Optionen oder ein <classname>Zend_Config</classname> Objekt als drittes
- Argument übergeben werden.
- </para>
- <para>
- Angenommen das die Elemente 'username' und 'passwort' bereits in der Form gesetzt
- wurden. Dann würde der folgende Code diese Elemente in einer 'login' Anzeigegruppe
- gruppieren:
- </para>
- <programlisting language="php"><![CDATA[
- $form->addDisplayGroup(array('username', 'password'), 'login');
- ]]></programlisting>
- <para>
- Auf Displaygruppen kann mithilfe der <methodname>getDisplayGroup()</methodname> Methode
- zugegriffen werden, oder über Überladung inden der Name der Anzeigegruppe verwendet
- wird:
- </para>
- <programlisting language="php"><![CDATA[
- // getDisplayGroup() verwenden:
- $login = $form->getDisplayGroup('login');
- // Überladen verwenden:
- $login = $form->login;
- ]]></programlisting>
- <note>
- <title>Standarddekoratore müssen nicht geladen werden</title>
- <para>
- Standardmäßig werden die Standarddekoratore während der Initialisierung des Objektes
- geladen. Das kann durch die Übergabe der 'disableLoadDefaultDecorators' Option, bei
- der Erstellung der Anzeigegruppe, deaktiviert werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form->addDisplayGroup(
- array('foo', 'bar'),
- 'foobar',
- array('disableLoadDefaultDecorators' => true)
- );
- ]]></programlisting>
- <para>
- Diese Option kann mit jeder anderen Option gemischt werden die übergeben wird,
- sowohl als Array Option als auch in einem <classname>Zend_Config</classname> Objekt.
- </para>
- </note>
- <sect3 id="zend.form.forms.displaygroups.global">
- <title>Globale Operationen</title>
- <para>
- Wie bei den Elementen gibt es einige Operationen welche alle Anzeigegruppen
- beeinflussen; diese inkludieren das Setzen von Dekoratoren und Setzen des Plugin
- Pfades in denen nach Dekoratoren nachgesehen werden soll.
- </para>
- <example id="zend.form.forms.displaygroups.global.paths">
- <title>Setzen des Dekorator Präfix Pfades für alle Anzeigegruppen</title>
- <para>
- Standardmäßig erben Anzeigegruppen die Dekorator Pfade welche die Form
- verwendet; wenn trotzdem in alternativen Orten nachgeschaut werden soll kann die
- <methodname>addDisplayGroupPrefixPath()</methodname> Methode verwendet werden.
- </para>
- <programlisting language="php"><![CDATA[
- $form->addDisplayGroupPrefixPath('My_Foo_Decorator', 'My/Foo/Decorator');
- ]]></programlisting>
- </example>
- <example id="zend.form.forms.displaygroups.global.decorators">
- <title>Setzen von Dekoratoren für alle Anzeigegruppen</title>
- <para>
- Es können Dekoratore für alle Anzeigegruppen gesetzt werden.
- <methodname>setDisplayGroupDecorators()</methodname> akzeptiert ein Array von
- Dekoratoren, wie <methodname>setDecorators()</methodname>, und überschreibt alle
- vorher gesetzten Dekoratore in jeder Anzeigegruppe. In diesem Beispiel setzen
- wir die Dekoratore einfach auf ein Fieldset (der FormElements Dekorator ist
- notwendig um sicherzustellen das die Elemente iterierbar sind):
- </para>
- <programlisting language="php"><![CDATA[
- $form->setDisplayGroupDecorators(array(
- 'FormElements',
- 'Fieldset'
- ));
- ]]></programlisting>
- </example>
- </sect3>
- <sect3 id="zend.form.forms.displaygroups.customClasses">
- <title>Eigene Anzeigegruppen Klassen verwenden</title>
- <para>
- Standardmäßig verwendet <classname>Zend_Form</classname> die
- <classname>Zend_Form_DisplayGroup</classname> Klasse für Anzeigegruppen. Man kann
- diese Klasse erweitern um eigene Funktionalitäten anzubieten.
- <methodname>addDisplayGroup()</methodname> erlaubt es nicht eine konkrete Instanz zu
- übergeben, aber sie erlaubt es eine Klasse zu spezifizieren die als eine
- Ihrer Optionen verwendet wird, indem der 'displayGroupClass' Schlüssel verwendet
- wird:
- </para>
- <programlisting language="php"><![CDATA[
- // Verwenden der 'My_DisplayGroup' Klasse
- $form->addDisplayGroup(
- array('username', 'password'),
- 'user',
- array('displayGroupClass' => 'My_DisplayGroup')
- );
- ]]></programlisting>
- <para>
- Wenn die Klasse noch nicht geladen wurde, versucht <classname>Zend_Form</classname>
- das zu tun, indem <classname>Zend_Loader</classname> verwendet wird.
- </para>
- <para>
- Es kann auch eine eine Standardklasse für Anzeigegruppen definiert werden die mit
- der Form zu verwenden ist, sodas alle Anzeigegrupen die mit dem Form Objekt
- erstellt werden diese Klasse verwenden:
- </para>
- <programlisting language="php"><![CDATA[
- // Verwenden der Klasse 'My_DisplayGroup' für alle Anzeigegruppen:
- $form->setDefaultDisplayGroupClass('My_DisplayGroup');
- ]]></programlisting>
- <para>
- Diese Einstellung kann in Konfigurationen als 'defaultDisplayGroupClass'
- spezifiziert werden, und wird früh geladen um sicherzustellen das alle
- Anzeigegruppen diese Klasse verwenden.
- </para>
- </sect3>
- <sect3 id="zend.form.forms.displaygroups.interactionmethods">
- <title>Methoden für die Interaktion mit Anzeigegruppen</title>
- <para>
- Die folgenden Methoden können verwendet werden um mit Anzeigegruppen zu
- interagieren:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addDisplayGroup(array $elements, $name, $options =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addDisplayGroups(array $groups)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDisplayGroups(array $groups)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDisplayGroup($name)</methodname></para></listitem>
- <listitem><para><methodname>getDisplayGroups()</methodname></para></listitem>
- <listitem><para><methodname>removeDisplayGroup($name)</methodname></para></listitem>
- <listitem><para><methodname>clearDisplayGroups()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>setDisplayGroupDecorators(array $decorators)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addDisplayGroupPrefixPath($prefix, $path)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDefaultDisplayGroupClass($class)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>getDefaultDisplayGroupClass($class)</methodname></para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.form.forms.displaygroups.methods">
- <title>Methoden von Zend_Form_DisplayGroup</title>
- <para>
- <classname>Zend_Form_DisplayGroup</classname> hat die folgenden Methoden, gruppiert
- nach Typ:
- </para>
- <itemizedlist>
- <listitem>
- <para>Konfiguration:</para>
- <itemizedlist>
- <listitem>
- <para><methodname>setOptions(array $options)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setConfig(Zend_Config $config)</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Metadaten:</para>
- <itemizedlist>
- <listitem>
- <para><methodname>setAttrib($key, $value)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>addAttribs(array $attribs)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setAttribs(array $attribs)</methodname></para>
- </listitem>
- <listitem><para><methodname>getAttrib($key)</methodname></para></listitem>
- <listitem><para><methodname>getAttribs()</methodname></para></listitem>
- <listitem>
- <para><methodname>removeAttrib($key)</methodname></para>
- </listitem>
- <listitem><para><methodname>clearAttribs()</methodname></para></listitem>
- <listitem><para><methodname>setName($name)</methodname></para></listitem>
- <listitem><para><methodname>getName()</methodname></para></listitem>
- <listitem>
- <para><methodname>setDescription($value)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDescription()</methodname></para></listitem>
- <listitem>
- <para><methodname>setLegend($legend)</methodname></para>
- </listitem>
- <listitem><para><methodname>getLegend()</methodname></para></listitem>
- <listitem><para><methodname>setOrder($order)</methodname></para></listitem>
- <listitem><para><methodname>getOrder()</methodname></para></listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Elemente:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>createElement($type, $name, array $options =
- array())</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addElement($typeOrElement, $name, array $options =
- array())</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addElements(array $elements)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setElements(array $elements)</methodname></para>
- </listitem>
- <listitem><para><methodname>getElement($name)</methodname></para></listitem>
- <listitem><para><methodname>getElements()</methodname></para></listitem>
- <listitem>
- <para><methodname>removeElement($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>clearElements()</methodname></para></listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Plugin Loader:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setPluginLoader(Zend_Loader_PluginLoader
- $loader)</methodname>
- </para>
- </listitem>
- <listitem><para><methodname>getPluginLoader()</methodname></para></listitem>
- <listitem>
- <para><methodname>addPrefixPath($prefix, $path)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>addPrefixPaths(array $spec)</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Dekoratore:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addDecorator($decorator, $options = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>getDecorator($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDecorators()</methodname></para></listitem>
- <listitem>
- <para><methodname>removeDecorator($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>clearDecorators()</methodname></para></listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Darstellung:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setView(Zend_View_Interface $view = null)</methodname>
- </para>
- </listitem>
- <listitem><para><methodname>getView()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>render(Zend_View_Interface $view = null)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>I18n:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setTranslator(Zend_Translate_Adapter $translator =
- null)</methodname>
- </para>
- </listitem>
- <listitem><para><methodname>getTranslator()</methodname></para></listitem>
- <listitem>
- <para><methodname>setDisableTranslator($flag)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>translatorIsDisabled()</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.form.forms.subforms">
- <title>Subformen</title>
- <para>
- Subformen haben unterschiedliche Zwecke:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Erstellung von logischen Element Gruppen. Da Subformen einfach Formen sind,
- können Sie auch wie individuelle Einheiten geprüft werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Erstellung von Multi-Seiten Formen. Da Subformen einfach Formen sind, kann eine
- separate Subform pro Seite angezeigt werden, um Multi-Seiten Formen zu bauen in
- denen jede Form seine eigene Prüflogik besitzt. Nur sobald alle Subformen
- geprüft wurden würde die Form als komplett angenommen werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Anzeige Gruppierungen. Wie Anzeigegruppen, können Subformen, wenn Sie als Teil
- einer größeren Form dargestellt werden, verwendet werden um Elemente zu
- gruppieren. Trotzdem muß darauf geachtet werden dass das Hauptform Objekt keine
- Ahnung von den Elementen in Subformen besitzt.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Eine Subform kann ein <classname>Zend_Form</classname> Objekt sein, oder typischerweise
- ein <classname>Zend_Form_SubForm</classname> Objekt. Das zweitere enthält Dekoratore die
- für das Einfügen in größere Formen passen (z.B. gibt es keine zusätzlichen
- <acronym>HTML</acronym> form Tags aus, gruppiert aber Elemente). Um eine Subform
- anzuhängen, muß diese einfach der Form hinzugefügt und ein Name vergeben werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form->addSubForm($subForm, 'subform');
- ]]></programlisting>
- <para>
- Eine Subform kann empfangen werden indem entweder
- <methodname>getSubForm($name)</methodname> oder Überladung mithilfe des Namens der
- Subform verwendet wird:
- </para>
- <programlisting language="php"><![CDATA[
- // Verwenden von getSubForm():
- $subForm = $form->getSubForm('subform');
- // Verwenden von Überladen:
- $subForm = $form->subform;
- ]]></programlisting>
- <para>
- Subformen sind bei der Iteration der Form enthalten, aber die Elemente die Sie enthalten
- nicht.
- </para>
- <sect3 id="zend.form.forms.subforms.global">
- <title>Globale Operationen</title>
- <para>
- Wie Elemente und Anzeigegruppen. gibt es einige Operationen für die es notwendig
- ist alle Subformen zu bearbeiten. Anders als Anzeigegruppen und Elemente, erben
- Subformen die meisten Funktionalitäten vom Hauptform Objekt, und die einzige
- wirklich Operation die durchgeführt werden sollte, ist das Setzen der Dekoratore
- für Subformen. Für diesen Zweck, gibt es die
- <methodname>setSubFormDecorators()</methodname> Methode. Im nächsten Beispiel setzen
- wir den Dekorator für alle Subformen einfach auf ein Fieldset (der FormElements
- Dekorator wird benötigt um sicherzustellen das seine Elemente iterierbar sind):
- </para>
- <programlisting language="php"><![CDATA[
- $form->setSubFormDecorators(array(
- 'FormElements',
- 'Fieldset'
- ));
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.form.forms.subforms.methods">
- <title>Methoden für die Interaktion mit Subfomen</title>
- <para>
- Die folgenden Meothden können verwendet werden um mit Subformen zu interagieren:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addSubForm(Zend_Form $form, $name, $order = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addSubForms(array $subForms)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setSubForms(array $subForms)</methodname></para>
- </listitem>
- <listitem><para><methodname>getSubForm($name)</methodname></para></listitem>
- <listitem><para><methodname>getSubForms()</methodname></para></listitem>
- <listitem><para><methodname>removeSubForm($name)</methodname></para></listitem>
- <listitem><para><methodname>clearSubForms()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>setSubFormDecorators(array $decorators)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- <sect2 id="zend.form.forms.metadata">
- <title>Metadaten und Attribute</title>
- <para>
- Wärend die Nützlichkeit von Formen primär von den Elementen die Sie enthalten her
- rührt, enthhalten Sie auch anderen Metadaten, wie einen Namen (oft verwendet als
- eindeutige ID im <acronym>HTML</acronym> Markup); die Aktion und Methode der Form; die
- Anzahl an Elementen, Gruppen, und Subformen die Sie enthält; und sonstige Metadaten (die
- normalerweise verwendet werden um <acronym>HTML</acronym> Attribute für das Form Tag
- selbst zu setzen).
- </para>
- <para>
- Der Name der Form kann mithilfe der name Zugriffsmethoden gesetzt und empfangen werden:
- </para>
- <programlisting language="php"><![CDATA[
- // Den Namen setzen:
- $form->setName('registration');
- // Den Namen empfangen:
- $name = $form->getName();
- ]]></programlisting>
- <para>
- Um die Aktion (URL zu der die Form übermittelt) und Methode (Methode mit der
- übermittelt werden soll, 'POST' oder '<constant>GET</constant>') zu setzen, können die
- Zugriffsmethoden für action und method verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- // action und method setzen:
- $form->setAction('/user/login')
- ->setMethod('post');
- ]]></programlisting>
- <para>
- Man kann auch den Encoding Typ des Formulars spezifizieren indem die Enctype
- Zugriffsmethode verwendet wird. <classname>Zend_Form</classname> definiert zwei
- Konstanten, <constant>Zend_Form::ENCTYPE_URLENCODED</constant> und
- <constant>Zend_Form::ENCTYPE_MULTIPART</constant>, die den Werten
- 'application/x-www-form-urlencoded' und 'multipart/form-data' entsprechen; trotzdem kann
- das auf jeden gewünschten Encodingtyp gesetzt werden.
- </para>
- <programlisting language="php"><![CDATA[
- // Setzt die Aktion, Methoden, und Enctype:
- $form->setAction('/user/login')
- ->setMethod('post')
- ->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
- ]]></programlisting>
- <note>
- <para>
- Methode, Aktion und Encodingtyp werden nur intern für die Darstellung verwendet,
- und nicht für irgendeine Art von Prüfung.
- </para>
- </note>
- <para>
- <classname>Zend_Form</classname> implementiert das <classname>Countable</classname>
- Interface, welches es erlaubt es als Argument fürs Zählen zu übergeben:
- </para>
- <programlisting language="php"><![CDATA[
- $numItems = count($form);
- ]]></programlisting>
- <para>
- Das Setzen von eigenen Metadaten wird durch die attribs Zugriffsmethode durchgeführt.
- Da Überladen in <classname>Zend_Form</classname> verwendet wird um auf Elemente,
- Anzeigegruppen, und Subformen zuzugreifen ist das die einzige Methode für den Zugriff
- auf Metadaten.
- </para>
- <programlisting language="php"><![CDATA[
- // Setzen von Attributen:
- $form->setAttrib('class', 'zend-form')
- ->addAttribs(array(
- 'id' => 'registration',
- 'onSubmit' => 'validate(this)',
- ));
- // Empfangen von Attributen:
- $class = $form->getAttrib('class');
- $attribs = $form->getAttribs();
- // Entfernen eines Attributes:
- $form->removeAttrib('onSubmit');
- // Löschen aller Attribute:
- $form->clearAttribs();
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.form.forms.decorators">
- <title>Dekoratore</title>
- <para>
- Das Erstellen des Markups für eine Form ist oft ein zeitintensiver Arbeitsschritt,
- speziell wenn man plant das selbe Markup wiederzuverwenden um Dinge zu zeigen wie
- Prüffehler, übermittelte Werte, usw. <classname>Zend_Form</classname>'s Antwort hierfür
- sind <emphasis>Dekoratore</emphasis>.
- </para>
- <para>
- Dekoratore für <classname>Zend_Form</classname> Objekte können verwendet werden um eine
- Form darzustellen. Der FormElements Dekorator iteriert durch alle Elemente in einer Form
- -- Elemente, Anzeigegruppen, und Subformen -- stellt sie dar, und gibt das Ergebnis
- zurück. Zusätzliche Dekoratore können dann verwendet werden um diese Inhalte zu
- wrappen, sie anzufügen oder sie voranzustellen.
- </para>
- <para>
- Die Standarddekoratore für <classname>Zend_Form</classname> sind FormElemente, HtmlTag
- (wrappt in einer Definitionsliste), und Form; der entsprechende Code für deren
- Erstellung ist wie folgt:
- </para>
- <programlisting language="php"><![CDATA[
- $form->setDecorators(array(
- 'FormElements',
- array('HtmlTag', array('tag' => 'dl')),
- 'Form'
- ));
- ]]></programlisting>
- <para>
- Das erstellt eine Ausgabe wie die folgende:
- </para>
- <programlisting language="html"><![CDATA[
- <form action="/form/action" method="post">
- <dl>
- ...
- </dl>
- </form>
- ]]></programlisting>
- <para>
- Jegliche Attribute die auf dem Form Objekt gesetzt sindwerden als
- <acronym>HTML</acronym> Attribute des <emphasis><form></emphasis> Tags verwendet.
- </para>
- <note>
- <title>Standarddekoratore müssen nicht geladen werden</title>
- <para>
- Standardmäßig werden die Standarddekoratore während der Initialisierung des Objektes
- geladen. Das kann durch die Übergabe der 'disableLoadDefaultDecorators' Option, bei
- der Erstellung der Anzeigegruppe, deaktiviert werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form = new Zend_Form(array('disableLoadDefaultDecorators' => true));
- ]]></programlisting>
- <para>
- Diese Option kann mit jeder anderen Option gemischt werden die übergeben wird,
- sowohl als Array Option als auch in einem <classname>Zend_Config</classname> Objekt.
- </para>
- </note>
- <note>
- <title>Verwenden mehrerer Dekoratore des gleichen Typs</title>
- <para>
- Intern verwendet <classname>Zend_Form</classname> eine Dekorator Klasse als
- Mechsnismus für das nachsehen wenn Dekoratore empfangen werden. Als Ergebnis können
- mehrere Dekoratore nicht zur gleichen Zeit registriert werden; nachfolgende
- Dekoratore würden einfach die vorher existierenden überschreiben.
- </para>
- <para>
- Um das zu umgehen können Aliase verwendet werden. Statt der Übergabe eines
- Dekorators oder eines Dekoratornamens als erstes Argument an
- <methodname>addDecorator()</methodname>, kann ein Array mit einem einzelnen Argument
- übergeben werden, mit dem Alias der auf das Dekorator Objekt oder den Namen zeigt:
- </para>
- <programlisting language="php"><![CDATA[
- // Alias zu 'FooBar':
- $form->addDecorator(array('FooBar' => 'HtmlTag'), array('tag' => 'div'));
- // Und Ihn später empfangen:
- $form = $element->getDecorator('FooBar');
- ]]></programlisting>
- <para>
- In den <methodname>addDecorators()</methodname> und
- <methodname>setDecorators()</methodname> Methoden muß die 'decorator' Option im
- Array übergeben werden das den Dekorator repräsentiert:
- </para>
- <programlisting language="php"><![CDATA[
- // Zwei 'HtmlTag' Dekoratore hinzufügen und einen mit 'FooBar' benennen:
- $form->addDecorators(
- array('HtmlTag', array('tag' => 'div')),
- array(
- 'decorator' => array('FooBar' => 'HtmlTag'),
- 'options' => array('tag' => 'dd')
- ),
- );
- // Und Sie später empfangen:
- $htmlTag = $form->getDecorator('HtmlTag');
- $fooBar = $form->getDecorator('FooBar');
- ]]></programlisting>
- </note>
- <para>
- Man kann eigene Dekoratore für die Erzeugung der Form erstellen. Ein üblicher Grund
- hierfür ist, wenn man das exakte <acronym>HTML</acronym> weiß das man verwenden will;
- der Dekorator könnte das exakte <acronym>HTML</acronym> erstellen und es einfach
- zurückgeben, wobei potentiell die Dekoratore der individuellen Elemente oder
- Anzeigegruppen verwendet werden.
- </para>
- <para>
- Die folgenden Methoden können verwendet werden um mit Dekoratoren zu interagieren:
- </para>
- <itemizedlist>
- <listitem>
- <para><methodname>addDecorator($decorator, $options = null)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>addDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDecorator($name)</methodname></para></listitem>
- <listitem><para><methodname>getDecorators()</methodname></para></listitem>
- <listitem><para><methodname>removeDecorator($name)</methodname></para></listitem>
- <listitem><para><methodname>clearDecorators()</methodname></para></listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Form</classname> verwendet auch das Überladen um die Darstellung von
- speziellen Dekoratoren zu erlauben. <methodname>__call()</methodname> interagiert mit
- Methoden die mit dem Text 'render' beginnen und verwendet den Rest des Methodennamens
- um nach einem Dekorator zu suchen; wenn er gefunden wird, wird dieser
- <emphasis>einzelne</emphasis> Dekorator dargestellt. Jedes Argument das dem
- Methodenaufruf übergeben wird, wird als Inhalt an die <methodname>render()</methodname>
- Methode des Dekorators übergeben. Als Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- // Stellt nur den FormElements Dekorator dar:
- echo $form->renderFormElements();
- // Stell nur den Fieldset Dekorator dar, und übergibt Inhalte:
- echo $form->renderFieldset("<p>Das ist der Fieldset Inhalt</p>");
- ]]></programlisting>
- <para>
- Wenn der Dekorator nicht existiert, wird eine Exception geworfen.
- </para>
- </sect2>
- <sect2 id="zend.form.forms.validation">
- <title>Prüfung</title>
- <para>
- Ein primärer Verwendungszweck für Forms ist die Überprüfung von übermittelten Daten.
- <classname>Zend_Form</classname> erlaubt es eine komplette Form, eine teilweise Form,
- oder Antworten von XmlHttpRequests (AJAX) zu prüfen. Wenn die übertragenen Daten nicht
- gültig sind, hat es Methoden für das Empfangen der verschiedenen Fehlercodes und
- Nachrichten für Elemente und Subformen.
- </para>
- <para>
- Um eine ganze Form zu prüfen, kann die <methodname>isValid()</methodname> Methode
- verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- if (!$form->isValid($_POST)) {
- // Prüfung fehlgeschlagen
- }
- ]]></programlisting>
- <para>
- <methodname>isValid()</methodname> prüft jedes benötigte Element, und jedes nicht
- benötigte Element das in den übermittelten Daten enthalten ist.
- </para>
- <para>
- Manchmal muß nur ein Subset der Daten geprüft werden; dafür kann
- <methodname>isValidPartial($data)</methodname> verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- if (!$form->isValidPartial($data)) {
- // Prüfung fehlgeschlagen
- }
- ]]></programlisting>
- <para>
- <methodname>isValidPartial()</methodname> versucht nur die Teile zu prüfen für die es
- passende Elemente gibt; wenn ein Element nicht in den Daten repräsentiert ist, wird es
- übersprungen.
- </para>
- <para>
- Wenn Elemente oder Gruppen von Elementen für eine <acronym>AJAX</acronym> Anfrage
- geprüft werden, wird üblicherweise ein Subset der Form geprüft, und die Antwort in
- <acronym>JSON</acronym> zurückgegeben. <methodname>processAjax()</methodname> führt das
- präzise durch:
- </para>
- <programlisting language="php"><![CDATA[
- $json = $form->processAjax($data);
- ]]></programlisting>
- <para>
- Man kann dann einfach die <acronym>JSON</acronym> Antwort an den Client senden. Wenn die
- Form gültig ist, wird das eine boolsche <constant>TRUE</constant> Antwort sein. Wenn
- nicht, wird es ein Javascript Objekt sein das Schlüssel/Nachricht Paare enthält, wobei
- jede Nachricht 'message' ein Array von Prüf-Fehlermeldungen enthält.
- </para>
- <para>
- Für Forms bei denen die Prüfung fehlschlägt, können beide, Fehlercodes und
- Fehlermeldung empfangen werden, indem <methodname>getErrors()</methodname> und
- <methodname>getMessages()</methodname> verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- $codes = $form->getErrors();
- $messages = $form->getMessages();
- ]]></programlisting>
- <note>
- <para>
- Da die Nachrichten die von <methodname>getMessages()</methodname> zurückgegeben
- werden in einem Array von Fehlercode/Nachricht Paaren sind, wird
- <methodname>getErrors()</methodname> normalerweise nicht benötigt.
- </para>
- </note>
- <para>
- Codes und Fehlermeldungen kann man für individuelle Elemente erhalten indem einfach
- der Name des Elements an jede übergeben wird:
- </para>
- <programlisting language="php"><![CDATA[
- $codes = $form->getErrors('username');
- $messages = $form->getMessages('username');
- ]]></programlisting>
- <note>
- <para>
- Notiz: Wenn Elemente geprüft werden, sendet <classname>Zend_Form</classname> ein
- zweites Argument zu jeder <methodname>isValid()</methodname> Methode der Elemente:
- Das Array der Daten die geprüft werden sollen. Das kann von individuellen Prüfern
- verwendet werden um Ihnen zu erlauben andere übertragene Werte zu verwenden wenn die
- Gültigkeit der Daten ermittelt wird. Ein Beispiel wäre eine Registrations Form die
- beide benötigt, ein Passwort und eine Passwort Bestätigung; das Passwort Element
- könnte die Passwort Bestätigung als Teil seiner Prüfung verwenden.
- </para>
- </note>
- <sect3 id="zend.form.forms.validation.errors">
- <title>Selbst definierte Fehlermeldungen</title>
- <para>
- Von Zeit zu Zeit ist es gewünscht ein oder mehrere spezielle Fehlermeldungen zu
- spezifizieren die statt den Fehlermeldungen verwendet werden sollen die von den
- Validatoren verwendet werden die dem Element angehängt sind. Zusätzlich will man von
- Zeit zu Zeit ein Element selbst als ungültig markieren. Diese Funktionalität ist
- über die folgenden Methoden ermöglicht.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addErrorMessage($message)</methodname>: Fügt eine Fehlermeldung
- hinzu die bei Form-Überprüfungs-Fehlern angezeigt wird. Sie kann mehr als
- einmal aufgerufen werden, und neue Meldungen werden dem Stack angehängt.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addErrorMessages(array $messages)</methodname>: Fügt mehrere
- Fehlermeldungen hinzu die bei Form-Überprüfungs-Fehlern angezeigt werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setErrorMessages(array $messages)</methodname>: Fügt mehrere
- Fehlermeldungen hinzu die bei Form-Überprüfungs-Fehlern angezeigt werden,
- und überschreibt alle vorher gesetzten Fehlermeldungen.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getErrorMessages()</methodname>: Empfängt eine Liste von
- selbstdefinierten Fehlermeldungen die vorher definiert wurden.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>clearErrorMessages()</methodname>: Entfernt alle eigenen
- Fehlermeldungen die vorher definiert wurden.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>markAsError()</methodname>: Markiert das Element wie wenn die
- Überprüfung fehlgeschlagen wäre.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addError($message)</methodname>: Fügt einen Fehler zum eigenen
- Stack der Fehlermeldungen hinzu und markiert das Element als ungültig.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addErrors(array $messages)</methodname>: Fügt mehrere
- Nachrichten zum eigenen Stack der Fehlermeldungen hinzu und markiert das
- Element als ungültig.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setErrors(array $messages)</methodname>: Überschreibt den
- eigenen Stack der Fehlermeldungen mit den angegebenen Meldungen und markiert
- das Element als ungültig.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Alle auf diesem Weg gesetzten Fehler können übersetzt werden.
- </para>
- </sect3>
- <sect3 id="zend.form.forms.validation.values">
- <title>Nur einen gültigen Wert empfangen</title>
- <para>
- Es gibt Szenarien in denen man dem Benutzer erlauben will in verschiedenen Schritten
- mit einem gültigen Formular zu arbeiten. In der Zwischenzeit wird dem Benutzer
- erlaubt das Formular mit jedem Set an Werte zu speichern. Dann, wenn alle Daten
- spezifiziert wurden kann das Modell von der Building oder Prototyping Stufe zu einer
- Gültigen Stufe transferiert werden.
- </para>
- <para>
- Alle gültigen Werte die mit den übermittelten Daten übereinstimmen können empfangen
- werden indem folgendes aufgerufen wird:
- </para>
- <programlisting language="php"><![CDATA[
- $validValues = $form->getValidValues($_POST);
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.form.forms.methods">
- <title>Methoden</title>
- <para>
- Nachfolgend ist eine komplette Liste der in <classname>Zend_Form</classname> vorhandenen
- Methoden, gruppiert nach Typ:
- </para>
- <itemizedlist>
- <listitem>
- <para>Konfiguration und Optionen:</para>
- <itemizedlist>
- <listitem>
- <para><methodname>setOptions(array $options)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setConfig(Zend_Config $config)</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Plugin Loader und Pfade:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setPluginLoader(Zend_Loader_PluginLoader_Interface $loader,
- $type = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>getPluginLoader($type = null)</methodname></para>
- </listitem>
- <listitem>
- <para>
- <methodname>addPrefixPath($prefix, $path, $type = null) </methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addPrefixPaths(array $spec)</methodname></para>
- </listitem>
- <listitem>
- <para>
- <methodname>addElementPrefixPath($prefix, $path, $type =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addElementPrefixPaths(array $spec)</methodname></para>
- </listitem>
- <listitem>
- <para>
- <methodname>addDisplayGroupPrefixPath($prefix, $path)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Metadaten:</para>
- <itemizedlist>
- <listitem>
- <para><methodname>setAttrib($key, $value)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>addAttribs(array $attribs)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setAttribs(array $attribs)</methodname></para>
- </listitem>
- <listitem><para><methodname>getAttrib($key)</methodname></para></listitem>
- <listitem><para><methodname>getAttribs()</methodname></para></listitem>
- <listitem><para><methodname>removeAttrib($key)</methodname></para></listitem>
- <listitem><para><methodname>clearAttribs()</methodname></para></listitem>
- <listitem><para><methodname>setAction($action)</methodname></para></listitem>
- <listitem><para><methodname>getAction()</methodname></para></listitem>
- <listitem><para><methodname>setMethod($method)</methodname></para></listitem>
- <listitem><para><methodname>getMethod()</methodname></para></listitem>
- <listitem><para><methodname>setName($name)</methodname></para></listitem>
- <listitem><para><methodname>getName()</methodname></para></listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Elemente:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addElement($element, $name = null, $options =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addElements(array $elements)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setElements(array $elements)</methodname></para>
- </listitem>
- <listitem><para><methodname>getElement($name)</methodname></para></listitem>
- <listitem><para><methodname>getElements()</methodname></para></listitem>
- <listitem><para><methodname>removeElement($name)</methodname></para></listitem>
- <listitem><para><methodname>clearElements()</methodname></para></listitem>
- <listitem>
- <para><methodname>setDefaults(array $defaults)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDefault($name, $value)</methodname></para>
- </listitem>
- <listitem><para><methodname>getValue($name)</methodname></para></listitem>
- <listitem><para><methodname>getValues()</methodname></para></listitem>
- <listitem>
- <para><methodname>getUnfilteredValue($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>getUnfilteredValues()</methodname></para></listitem>
- <listitem>
- <para><methodname>setElementFilters(array $filters)</methodname></para>
- </listitem>
- <listitem>
- <para>
- <methodname>setElementDecorators(array $decorators)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Subformen:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addSubForm(Zend_Form $form, $name, $order =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addSubForms(array $subForms)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setSubForms(array $subForms)</methodname></para>
- </listitem>
- <listitem><para><methodname>getSubForm($name)</methodname></para></listitem>
- <listitem><para><methodname>getSubForms()</methodname></para></listitem>
- <listitem><para><methodname>removeSubForm($name)</methodname></para></listitem>
- <listitem><para><methodname>clearSubForms()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>setSubFormDecorators(array $decorators)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Anzeigegruppen:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>addDisplayGroup(array $elements, $name, $options =
- null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addDisplayGroups(array $groups)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDisplayGroups(array $groups)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>getDisplayGroup($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDisplayGroups()</methodname></para></listitem>
- <listitem>
- <para><methodname>removeDisplayGroup($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>clearDisplayGroups()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>setDisplayGroupDecorators(array $decorators)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Prüfungen</para>
- <itemizedlist>
- <listitem>
- <para><methodname>populate(array $values)</methodname></para>
- </listitem>
- <listitem><para><methodname>isValid(array $data)</methodname></para></listitem>
- <listitem>
- <para><methodname>isValidPartial(array $data)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>processAjax(array $data)</methodname></para>
- </listitem>
- <listitem><para><methodname>persistData()</methodname></para></listitem>
- <listitem>
- <para><methodname>getErrors($name = null)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>getMessages($name = null)</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Darstellung:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setView(Zend_View_Interface $view = null)</methodname>
- </para>
- </listitem>
- <listitem><para><methodname>getView()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>addDecorator($decorator, $options = null)</methodname>
- </para>
- </listitem>
- <listitem>
- <para><methodname>addDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>setDecorators(array $decorators)</methodname></para>
- </listitem>
- <listitem><para><methodname>getDecorator($name)</methodname></para></listitem>
- <listitem><para><methodname>getDecorators()</methodname></para></listitem>
- <listitem>
- <para><methodname>removeDecorator($name)</methodname></para>
- </listitem>
- <listitem><para><methodname>clearDecorators()</methodname></para></listitem>
- <listitem>
- <para>
- <methodname>render(Zend_View_Interface $view = null)</methodname>
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>I18n:</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setTranslator(Zend_Translate_Adapter $translator =
- null)</methodname>
- </para>
- </listitem>
- <listitem><para><methodname>getTranslator()</methodname></para></listitem>
- <listitem>
- <para><methodname>setDisableTranslator($flag)</methodname></para>
- </listitem>
- <listitem>
- <para><methodname>translatorIsDisabled()</methodname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.form.forms.config">
- <title>Konfiguration</title>
- <para>
- <classname>Zend_Form</classname> ist über <methodname>setOptions()</methodname> und
- <methodname>setConfig()</methodname> vollständig konfigurierbar (oder durch die Übergabe
- von Optionen oder einem <classname>Zend_Config</classname> Objekt an den Konstruktor).
- Durch Verwendung dieser Methoden können Form Elemente, Anzeigegruppen, Dekoratore, und
- Metadaten spezifiziert werden.
- </para>
- <para>
- Als generelle Regel, wenn 'set' + der Optionsschlüssel zu einer
- <classname>Zend_Form</classname> Methode referieren, wird der angebotene Wert zu dieser
- Methode übergeben. Wenn die Methode nicht existiert, wird angenommen das der Schlüssel
- eine Referenz zu einem Attribut ist, und wird an <methodname>setAttrib()</methodname>
- übergeben.
- </para>
- <para>
- Ausnahmen zu dieser Regel sind die folgenden:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <property>prefixPath</property> wird übergeben an
- <methodname>addPrefixPaths()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- <property>elementPrefixPath</property> wird übergeben an
- <methodname>addElementPrefixPaths()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>
- <property>displayGroupPrefixPath</property> wird übergeben an
- <methodname>addDisplayGroupPrefixPaths()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>die folgenden Setter können nicht auf diesem Weg gesetzt werden:</para>
- <itemizedlist>
- <listitem>
- <para>
- <property>setAttrib</property> (da setAttribs *wird* funktionieren)
- </para>
- </listitem>
- <listitem><para><property>setConfig</property></para></listitem>
- <listitem><para><property>setDefault</property></para></listitem>
- <listitem><para><property>setOptions</property></para></listitem>
- <listitem><para><property>setPluginLoader</property></para></listitem>
- <listitem><para><property>setSubForms</property></para></listitem>
- <listitem><para><property>setTranslator</property></para></listitem>
- <listitem><para><property>setView</property></para></listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- <para>
- Als Beispiel ist hier eine Konfigurationsdatei die eine Konfiguration für jeden Typ
- von konfigurierbaren Daten übergibt:
- </para>
- <programlisting language="ini"><![CDATA[
- [element]
- name = "Registrierung"
- action = "/user/register"
- method = "post"
- attribs.class = "zend_form"
- attribs.onclick = "validate(this)"
- disableTranslator = 0
- prefixPath.element.prefix = "My_Element"
- prefixPath.element.path = "My/Element/"
- elementPrefixPath.validate.prefix = "My_Validate"
- elementPrefixPath.validate.path = "My/Validate/"
- displayGroupPrefixPath.prefix = "My_Group"
- displayGroupPrefixPath.path = "My/Group/"
- elements.username.type = "text"
- elements.username.options.label = "Benutzername"
- elements.username.options.validators.alpha.validator = "Alpha"
- elements.username.options.filters.lcase = "StringToLower"
- ; natürlich mehr Elemente...
- elementFilters.trim = "StringTrim"
- ;elementDecorators.trim = "StringTrim"
- displayGroups.login.elements.username = "username"
- displayGroups.login.elements.password = "password"
- displayGroupDecorators.elements.decorator = "FormElements"
- displayGroupDecorators.fieldset.decorator = "Fieldset"
- decorators.elements.decorator = "FormElements"
- decorators.fieldset.decorator = "FieldSet"
- decorators.fieldset.decorator.options.class = "zend_form"
- decorators.form.decorator = "Form"
- ]]></programlisting>
- <para>
- Das obige könnte einfach abstrahiert werden zu einer <acronym>XML</acronym> oder
- <acronym>PHP</acronym> Array-basierenden Konfigurations Datei.
- </para>
- </sect2>
- <sect2 id="zend.form.forms.custom">
- <title>Eigene Forms</title>
- <para>
- Eine Alternative zur Verwendung von Konfigurations-basierenden Forms ist es
- <classname>Zend_Form</classname> abzuleiten. Das hat einige Vorteile:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Die Form kein einfachst mit Unittests getestet werden um sicherzugehen das
- Prüfungen und Darstellungen wie erwartet durchgeführt werden.
- </para>
- </listitem>
- <listitem>
- <para>Eine feinkörnige Kontrolle über individuelle Elemente.</para>
- </listitem>
- <listitem>
- <para>
- Wiederverwendung von Form Objekten, und größere Portierbarkeit (keine
- Notwendigkeit Konfigurationsdateien zu verfolgen).
- </para>
- </listitem>
- <listitem><para>Eigene Funktionalitäten zu implementieren.</para></listitem>
- </itemizedlist>
- <para>
- Der typischste Anwendungsfall würde sein die <methodname>init()</methodname> Methode zu
- verwenden um spezielle Form Elemente und Konfigurationen zu definieren:
- </para>
- <programlisting language="php"><![CDATA[
- class My_Form_Login extends Zend_Form
- {
- public function init()
- {
- $username = new Zend_Form_Element_Text('username');
- $username->class = 'formtext';
- $username->setLabel('Benutzername:')
- ->setDecorators(array(
- array('ViewHelper',
- array('helper' => 'formText')),
- array('Label',
- array('class' => 'label'))
- ));
- $password = new Zend_Form_Element_Password('password');
- $password->class = 'formtext';
- $password->setLabel('Passwort:')
- ->setDecorators(array(
- array('ViewHelper',
- array('helper' => 'formPassword')),
- array('Label',
- array('class' => 'label'))
- ));
- $submit = new Zend_Form_Element_Submit('login');
- $submit->class = 'formsubmit';
- $submit->setValue('Anmeldung')
- ->setDecorators(array(
- array('ViewHelper',
- array('helper' => 'formSubmit'))
- ));
- $this->addElements(array(
- $username,
- $password,
- $submit
- ));
- $this->setDecorators(array(
- 'FormElements',
- 'Fieldset',
- 'Form'
- ));
- }
- }
- ]]></programlisting>
- <para>
- Diese form kann instanziert werden mit einem einfachen:
- </para>
- <programlisting language="php"><![CDATA[
- $form = new My_Form_Login();
- ]]></programlisting>
- <para>
- und die gesamte Funktionalität ist bereits eingestellt und bereit; keine
- Konfigurationsdateien notwendig. (Bitte beachten das dieses Beispiel sehr vereinfacht
- ist, da es keine Prüfungen oder Filter für die Elemente enthält.)
- </para>
- <para>
- Ein anderer üblicher Grund für die Erweiterung ist es ein Set von Standard Dekoratoren
- zu definieren. Das kann durch überladen der
- <methodname>loadDefaultDecorators()</methodname> Methode durchgeführt werden:
- </para>
- <programlisting language="php"><![CDATA[
- class My_Form_Login extends Zend_Form
- {
- public function loadDefaultDecorators()
- {
- $this->setDecorators(array(
- 'FormElements',
- 'Fieldset',
- 'Form'
- ));
- }
- }
- ]]></programlisting>
- </sect2>
- </sect1>
|