Splendid,我不明白爲什麼你會有代碼重複的問題,在你的第二個鏈接,你正在執行你的支票,然後檢查頁面是否是一個post請求,然後再次執行檢查,是它的重複,但我不明白你在做什麼解釋這是什麼?關於表單,它取決於你如何使用它,你可以創建表單對象,然後不用把表單傳出來,只需將它傳遞給設計器表單中的數據,然後用它來驗證事物。
或者您可以使用自定義模板作爲表單,好吧,這意味着您不會給設計師相當多的設計表單和排序結果的自由度,但他們仍然可以盡力做到最好。
這是我使用的設置,畢竟我負責編程人員的功能,設計師只是讓它看起來很好。
因此,舉例來說,如果我想創建一個輸入元素我可以:
$arrival_time = $this->createElement('text', 'arrival_time', array(
'required' => true,
'label' => 'Arrival Time:',
));
$arrival_time->removeDecorator('HtmlTag');
$this->addElement($arrival_time);
通知我已經在這裏刪除HtmlTag裝飾 - 我不需要他們標記爲設計師們將安排事情對我來說。
接下來要做的是告訴窗體使用設計師所做的佈局:
$this->setDecorators(array(array('ViewScript', array('viewScript' => 'NewArrivalsForm.phtml'))));
這裏我的模板是視圖的,腳本的目錄中。
現在設計師有幾個選擇。他們可以這樣做:
<table border="0" width="100%">
<tr>
<td>
<?php echo $this->element->arrival_time; ?>
</td>
這會給你以下的輸出:
<td>
<dt id="arrival_time"><label for="arrival_time" class="required">Arrival Time:</label></dt>
<input type="text" name="arrival_time" id="arrival_time" value="" />
</td>
如果我們是一個錯誤,那將是和呈現。你可以去除裝修「標籤」,「說明」 &「錯誤」,以及,使得它只是一個輸入框:
<td>
<input type="text" name="arrival_time" id="arrival_time" value="" />
</td>
即使一旦你已經刪除了裝飾,設計者例如可以仍然使用:
<tr>
<td>
<?php echo $this->element->time_on_site->getLabel(); ?>
</td>
</tr>
<tr>
<td>
<?php echo $this->element->time_on_site ?>
</td>
這將允許他們完全按照自己的意願佈置表格。但它仍然允許您使用Zend_Form的全部功能進行最終驗證檢查。查看Zend/form/element.php,瞭解您和您的設計人員可以在表單元素上使用的所有方法。
你可以使你的Zend_Form,填充發布數據,並僅用於驗證和過濾。您不需要使用它來呈現表單的html。你有沒有考慮這個? – Marcin 2011-03-13 23:25:18
你好,任何你可以編輯你的問題的機會,包括這些代碼片段?看起來像粘貼bin鏈接已過期!很高興知道代碼是什麼:) – 2012-04-29 13:11:15