2012-02-26 97 views
2

你能幫我解決我的問題嗎?
我想將一個複選框放在用數據庫信息構建的用戶列表的每一行上,並添加一個驗證按鈕來發布我的表單。我的名單應該是這個樣子: -如何使用Zend Form動態創建多個複選框?

Diagram of form

那麼用戶將選擇鏈接到他要確認學生的複選框。 結果的行數是可變的,所以我不知道該怎麼做。 我希望我在我的描述中已經很清楚。

+0

有作爲multicheckbox沒有這樣的事情。複選框既可以設置也可以不設置。只需爲數據庫中的每一行創建一行,併爲每個行添加一個唯一的複選框。 – markus 2012-02-26 20:59:11

+0

thx Markus!請告訴我如何動態地爲每一行添加一個獨特的複選框。我曾經使用zend表單在我的應用程序中添加表單(當我已經知道要添加的複選框的數量時)。此時複選框的數量爲函數的數據庫找到的行數。我必須直接將它添加到我的視圖文件中嗎?如果是,如何? – jojo7 2012-02-26 21:24:30

+0

您不必在您的視圖中執行此操作,您可以在表單文件中執行此操作。只需對結果數組執行foreach循環即可。 – markus 2012-02-26 21:30:00

回答

-1

我認爲這可能是一種情況,partialLoop()可能是最好的解決方案。

在控制器

從模型像往常一樣讓你的數據,並分配給它的觀點

$this->view->modelData= $data; 

未來作出新的一個.phtml文件/views/scripts這個演示中,我們把它叫做_demoRow。 phtml然後編碼一個表格行(在這種情況下)的HTML和PHP。

<tr> 
    <td><?php echo $this->name ?></td> 
    <td><?php echo $this->class ?></td> 
    <td><?php echo $this->birth_date ?></td> 
    <td><input type="checkbox" name="id" value="<?php echo $this->id ?> /></td> 
</tr> 

然後在你的普通視圖只是把靜態信息和渲染部分

<form action="/your/action/url" method="post"> 
    <table class="spreadsheet" cellspacing="0"> 
    <tr>  
     <th>Student Name</th> 
     <th>Class</th> 
     <th>Birth Date</th> 
     <th>Select</th> 
    </tr> 
    <?php echo $this->partialLoop('_demoRow.phtml', $this->modelData) ?> 
    <tr> 
     <input type="submit" name="submit" value="valider" /> 
    </tr> 
    </table> 
</form> 

這應該接近你要找的內容。

+0

表單提交時會發生什麼? Zend-Form將不會了解新的元素,並且它們將不可用。 – vascowhite 2012-02-27 08:26:05

+0

@vascowhite當你點擊提交按鈕時,表單就像任何其他表單一樣用提交方法提交。 Zend_Form不是魔術,它只是抽象表單的構建並生成html,它與表單發佈時發生的事情無關。 – RockyFord 2012-02-27 08:59:08

+0

Zend_Form的某些方法不適用於您的解決方案: - isValid()',使用'foreach()'遍歷元素,'getValues()','getValue()'添加任何元素,'getValidValues ()';所有這些都在提交的表格上工作。還有其他的,但我認爲這足以說明我的觀點。 – vascowhite 2012-02-27 11:50:24

0

你沒有顯示任何代碼,但我假設你得到你的控制器中的學生數量。

爲了達到你想要的Zend_Form,你需要單獨呈現每個元素,但首先你需要找到一種方法來爲你的表單添加正確數量的元素。

最好,你會在你的表單類中做到這一點,以保持邏輯脫離控制器,但爲了保持這個答案簡單,我會告訴你如何在你的控制器中實現這一點,然後你可以根據需要調整代碼。

$numStudents = getNumberOfStudentsSomehow(); 
$studentForm = new yourFormClass(); 

for($i = 0; $i <= $numStudents; $i++){ 
    $checkBoxes[] = new Zend_Form_Element_Checkbox('checkBox_' . $i); 
} 
$studentForm->addElements($checkBoxes); 
$this->view->studentForm = $studentForm; 

您的表格現在有正確數量的複選框,您可以將它傳遞給視圖。
在視圖中,您有幾種渲染表單的選項,可以是RockyFordview helperdocumentation here)建議的視圖部分,也可以創建custom view script for your form或直接在視圖中渲染。

爲了讓您一開始,你可以使您的形式單獨的元素在你看來是這樣的: -

echo $this->view->studentForm->checkBox_0;