2

メッセージ/メールのテーブルがあり、テーブルの下部にあるボタンを使用して複数のメッセージを選択し、それらを削除するためのチェックボックスが必要です。

代表的な表

フレームワークを使用せずに標準の PHP/HTML を使用すると、次のことができるようになります。

<input type="checkbox" name="ids[]" value="510">
<input type="checkbox" name="ids[]" value="1231">

次に、PHP で、選択された ID の配列をループします。私はZF2で同じことを達成しようとしています。

ZF2 は以下を提供します。

FormCollection - is a collection of Fieldsets, which I think is wrong for storing an array of IDs passed.
MultiCheckbox - with the current set of ViewHelpers cannot be extracted using an interator
Checkbox - involves dynamically adding inputs with the ID of the name, but can't be looped through and validated so easily.

要素の挿入がサポートされている場合FormCollection、要素を動的に追加して POST 時にループできるので、それが最適なオプションであると言えます。近い将来、FormCollection を反復処理して個々のパーツを抽出FormCollectionできるように、要素を追加して必要性を置き換えることができるようになるMultiCheckboxと思いますMultiRadio

他の誰かがこのようなことをしたことがありますか?

私がいつも言っているように、フレームワークは難しいことを簡単にし、簡単なことを難しくします。

4

2 に答える 2

3

コントローラーでフォームを生成しようとしましたか? 例えば:

public function emailAction(){
    $emailList = $this->getEmailTable()->getEmails();

    $emailForm = new \Zend\Form\Form();
    $emailForm->setName('email_form');

    foreach($emailList as $email){
        $element = new \Zend\Form\Element\Checkbox($email->id);
        $emailForm->add($element);
    }

    return new ViewModel(array('form'=>$emailForm,'list'=>$emailList));
}

次に、ビューでリストを反復処理してテーブルを生成し、テーブルをフォームでカプセル化します。選択した送信の削除ボタンを作成することを忘れないでください。

<?php
    $form = $this->form;
    $form->setAttribute('action', $this->url('deleteEmail');
    $form->prepare();

    echo $this->form()->openTag($form);
?>
<table>
    <?php foreach($this->list as $item): ?>
        <tr>
            <td><?php echo $this->formElement($form->get($item->id));?></td>
            <td><?php echo $item->subject;?></td>
            <td><?php echo $item->receipt_date;?></td>
        </tr>
    <?php endforeach; ?>
</table>
<?php
    echo $this->formRow($form->get('submit'));
    echo $this->form()->closeTag();
?>

フォームが deleteEmail アクションに送信されると、フォーム要素を反復処理し、それらが選択されているかどうかを確認してから削除します。

public function deleteEmailAction(){
    $post = $request->getPost()->toArray();

    foreach($post as $key=>$value){
        if($value){
            $this->getEmailTable()->deleteEmail($key);
        }
    }
}

これは疑似コードと見なされ、機能させるには微調整が必​​要になる場合がありますが、問題をモデル化する方法についてのアイデアが得られることを願っています。最も簡単ではないかもしれません。

于 2013-08-06T21:46:06.410 に答える