Einfaches Formular erstellen
Die Grundvoraussetzung für die Erstellung eines Formulars ist ein Model mit zugehörigem XML und die entsprechende Action (Create oder Update)
Im RedSparkFramework gibt es zwei grundlegend unterschiedliche Arten, Formulare zu generieren.
Um die Action so umzustellen, dass die Zend_Form benutzt, genügt ein init option:
damit laufen dann folgende Schritte ab:
Durch die Nutzung von Zend_Form ist es möglich das Formular sowohl vollständig auto-generiert, mit manuellem Markup oder einem Mix aus beidem auszugeben.
Im folgenden sind verschiedene Smarty Snippets zu sehen, die das gleiche Formular auf andere Art und Weise ausgeben:
Grundlegendes
Im RedSparkFramework gibt es zwei grundlegend unterschiedliche Arten, Formulare zu generieren.
- Via RsForm_Handler (nicht so flexibel, aber voll implementiert)
- Via Zend_Form (WiP)
Genereller Ablauf Zend_Form
Um die Action so umzustellen, dass die Zend_Form benutzt, genügt ein init option:
parent::INIT_OPTIONS_USE_ZEND_FORM => true,
damit laufen dann folgende Schritte ab:
- Das XML wird geladen via $this->_getStructureXml();
- Das XML wird nach Zend_Form konvertiert mithilfe von $this->_getZendForm($xml);
- Das Zend_Form Objekt wird als Smarty assign zur Verfügung gestellt, oder direkt gerendert, wenn kein Snippet existiert
Ausgabe des Zend_Form Formulars
Durch die Nutzung von Zend_Form ist es möglich das Formular sowohl vollständig auto-generiert, mit manuellem Markup oder einem Mix aus beidem auszugeben.
Im folgenden sind verschiedene Smarty Snippets zu sehen, die das gleiche Formular auf andere Art und Weise ausgeben:
{* Completely render the form via zend *}
{$form->render()}
{* Render only the first subgroup *}
<form action="{$form->getAction()}">
{$form->group_0->render()}
</form>
{*Iterate over elements and render them *}
<form action="{$form->getAction()}">
{foreach from=$form->getElements() item="element"}
{$element->render()}
{/foreach}
</form>
{*manually render all elements*}
<form action="{$form->getAction()}">
{foreach from=$form->getElements() item="element"}
{if ($element instanceof Zend_Form_Element_Submit)}
<input type="submit" value="{$element->getLabel()}" /><br />
{else}
{$element->getLabel()}: <input type="text" name="{$element->getName()}" value="{$form->isbn->getValue()}" /><br />
{/if}
{/foreach}
</form>
{*manually render custom elements*}
<form action="{$form->getAction()}">
{$form->isbn->getLabel()}: <input type="text" name="{$form->isbn->getName()}" value="{$form->isbn->getValue()}" /><br />
{$form->title->getLabel()}: <input type="text" name="{$form->title->getName()}" /><br />
<input type="submit" value="save" />
</form>