<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8077096318029421941</id><updated>2011-07-08T09:36:08.912-07:00</updated><category term='Zend Framework'/><category term='PHP'/><category term='Zend_Form'/><title type='text'>schnipseljagd</title><subtitle type='html'>coding and web-development blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://schnipseljagd.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8077096318029421941/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://schnipseljagd.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joscha</name><uri>http://www.blogger.com/profile/03967113875012679943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_wr2OWbnzxfA/S7O2SkKSZ1I/AAAAAAAAAAM/UTZLSG0IvGA/S220/b14i7rr8qwlx9gvcj.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8077096318029421941.post-4358344837880117360</id><published>2010-04-01T01:16:00.000-07:00</published><updated>2010-04-02T04:47:37.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Zend_Form'/><title type='text'>Form generation with Zend_Form</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Moin, @welt.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Nachdem mir haufenweise Blogs in den verschiedenen Situationen beim Programmieren weitergeholfen haben, hier nun endlich mein eigenes.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Das erste Thema mit dem ich mich gerade beschäftigt habe und ich hier näher erläutern möchte ist die Formulargenerierung mit Zend_Form.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Was brauchen wir?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Das Modul Zend_Form und die Abhängigkeiten aus dem &lt;a href="http://framework.zend.com/download/latest"&gt;Zend Framework&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Was die Abhängikeiten angeht, so ist es leider ziemlich erschreckend was Zend_Form alles an zusätzlichen Modulen lädt (&lt;a href="http://code.google.com/p/schnipseljagd/source/browse/trunk/formgenerator/"&gt;siehe Code&lt;/a&gt;).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Sollte jemand ein besseres Modul zur Formular Erstellung kennen, ich bin für Vorschläge offen ;-).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Los gehts:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;FormGenerationInterface.php&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;pre class="prettyprint"&gt;&lt;table&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr id="sl_svn2_5" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="kwd"&gt;interface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;FormGenerationInterface&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_6" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_7" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="com"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_8" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="com"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* should return an array&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_9" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="com"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* that maps objects properties to Zend_Form_Element types&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_10" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="com"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return array&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_11" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="com"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_12" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="pln"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd"&gt;public&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;function&lt;/span&gt;&lt;span class="pln"&gt; getElementTypes&lt;/span&gt;&lt;span class="pun"&gt;();&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr id="sl_svn2_13" style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;td class="source"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;&lt;table&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr class="cursor_stop cursor_hidden"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;Das Interface wird von den Klassen implementiert aus deren Objekten Formulare generiert werden sollen.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Content.php&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt; class Content implements FormGenerationInterface&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;{&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $title = 'testTitle';&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $text;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $published;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $elementTypes = array(&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'title' =&amp;gt; 'text',&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'text' =&amp;gt; 'textarea',&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'published' =&amp;gt; 'checkbox',&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getElementTypes()&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;elementTypes;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getTitle()&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;title;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getText()&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;text;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function isPublished()&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $this-&amp;gt;published;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Content ist die Klasse aus deren Objekt ein Formular generiert werden soll. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Wie ihr seht implementiert Content das&lt;/span&gt; FormGenerationInterface und hält sich an gewisse Standards was die Getter angeht.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;FormFactory.php&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;class FormFactory&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @var FormGenerationInterface&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $object;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @var Zend_Form&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $form;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param FormGenerationInterface $object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function __construct(FormGenerationInterface $object)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;object = $object;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return Zend_Form&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function getForm()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $form = new Zend_Form();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;generateElements($form);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // add some other things&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $form-&amp;gt;setName('generatedForm');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $submit = new Zend_Form_Element_Submit('submit');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $form-&amp;gt;addElement($submit);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $form;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param Zend_Form $form &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected function generateElements(Zend_Form $form)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $elementTypes = $this-&amp;gt;object-&amp;gt;getElementTypes();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($elementTypes as $elementName =&amp;gt; $elementType) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get element value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $methodName = $this-&amp;gt;getObjectMethodName($elementName, $elementType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $elementValue = $this-&amp;gt;object-&amp;gt;$methodName();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set element&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $element = $this-&amp;gt;getFormElement($elementType, $elementName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $element-&amp;gt;setValue($elementValue);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // add element to form&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $form-&amp;gt;addElement($element);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param string $type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return Zend_Form_Element&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected function getFormElement($type, $name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $elementName = 'Zend_Form_Element_' . ucfirst($type);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new $elementName($name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param string $name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param string $type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected function getObjectMethodName($name, $type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch($type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'checkbox':&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $methodPraefix = 'is';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $methodPraefix = 'get';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $methodPraefix . ucfirst($name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Die FormFactory bekommt als Abhängigkeit ein Object übergeben, &lt;/span&gt;aus welchem das Formular generiert werden soll (in diesem Fall das Object der Klasse Content). Per Typehint wird sichergestellt, dass FormGenerationInterface implementiert ist.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Die Methode getForm gibt das fertige Object der Klasse Zend_Form zurück und lädt die Methode&amp;nbsp;generateElements.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;generateElements liest Content durch die über getElementTypes geholte Map aus und dekoriert die Instanz von Zend_Form mit den passenden Zend_Form_Element Objekten.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Jetzt zahlt es sich aus, dass wir Content einheitliche Getter Namen gegeben haben da wir jetzt anhand der elementTypes feststellen können welcher Getter Praefix benutzt wird.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Das wars im Groben auch schon, ich hoffe ich konnte hier einige Anregungen geben was einem Zend_Form ermöglicht.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/schnipseljagd/source/browse/trunk/formgenerator/"&gt;Hier der Code zum Post&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8077096318029421941-4358344837880117360?l=schnipseljagd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://schnipseljagd.blogspot.com/feeds/4358344837880117360/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8077096318029421941&amp;postID=4358344837880117360' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8077096318029421941/posts/default/4358344837880117360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8077096318029421941/posts/default/4358344837880117360'/><link rel='alternate' type='text/html' href='http://schnipseljagd.blogspot.com/2010/04/form-generation-with-zendform.html' title='Form generation with Zend_Form'/><author><name>Joscha</name><uri>http://www.blogger.com/profile/03967113875012679943</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_wr2OWbnzxfA/S7O2SkKSZ1I/AAAAAAAAAAM/UTZLSG0IvGA/S220/b14i7rr8qwlx9gvcj.gif'/></author><thr:total>0</thr:total></entry></feed>
