2012-02-26 8 views
2

私の問題を解決するのに手伝ってください。
データベース情報で構築されたユーザーのリストのすべての行にチェックボックスを置き、フォームを投稿するための検証ボタンを追加したいと思います。Zend Formで複数のチェックボックスを動的に作成するにはどうすればいいですか?

Diagram of form

ので、ユーザは自分が検証したい学生にリンクされているチェックボックスを選択します - :私のリストは、次のようになります。 結果の行数は可変なので、それを行う方法はわかりません。 私は私の記述ではっきりとわかったと思います。

+0

multicheckboxのようなものはありません。チェックボックスは設定されているか、設定されていません。データベースの行ごとに行を作成し、それぞれに一意のチェックボックスを追加するだけです。 – markus

+0

thx Markus!各行に一意のチェックボックスを動的に追加する方法を教えてください。アプリケーションにフォームを追加するためにzendフォームを使用しました(既に追加するチェックボックスの数を知っています)。データベースが検出する行数の関数。ビューファイルに直接追加する必要がありますか? – jojo7

+0

ビューで行う必要はありません。フォームファイルで行うことができます。結果配列に対してforeachループを実行するだけです。 – markus

答えて

-1

私はこれが最良の解決策であるかもしれないと考えていたと思います。お使いのコントローラで

は、いつものようにモデルからデータを取得し、次の我々は_demoRowそれを呼ぶことにします。このデモのために/views/scriptsに新しい.phtmlファイルを作成するビュー

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

にそれにデータを割り当てます。 phtmlを実行して、1つのテーブル行(この場合)の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

+0

@vascowhite送信ボタンを押すと、フォームは他のフォームと同様にpostメソッドで送信されます。 Zend_Formは魔法ではなく、フォームの構築だけを抽象化し、フォームを投稿するときに何が起きるかとは関係のないhtmlを生成します。 – RockyFord

+0

Zend_Formのいくつかのメソッドは、あなたの解決策では動作しません: 'foreach()'を使って要素をステップスルーする 'isValid()'、追加された要素のどれでも 'getValues()'、 'getValue()'、 'getValidValues () ';これらのすべてが提出されたフォームで動作します。他にもありますが、私の考えを説明するには十分だと思います。 – vascowhite

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; 

フォームに正しい数のチェックボックスが追加され、ビューに渡すことができます。
フォームのレンダリングには、RockyFordのようなビューパーシャル、view helperdocumentation here)、custom view script for your formのいずれかを作成するか、ビューに直接レンダリングする方法があります。

は、あなたがこのようなあなたのビューでフォームから個々の要素をレンダリングすることができます開始するには: -

echo $this->view->studentForm->checkBox_0; 
関連する問題