Zend framework2 ZF2-表行中的复选框

Zend framework2 ZF2-表行中的复选框,zend-framework2,zend-form2,Zend Framework2,Zend Form2,我有一个消息/电子邮件表,希望有一个复选框,可以选择多条消息,并使用表底部的按钮删除它们: 使用标准PHP/HTML非常简单,无需使用框架,您可以: <input type="checkbox" name="ids[]" value="510"> <input type="checkbox" name="ids[]" value="1231"> 如果FormCollection支持插入元素,我认为这是最好的选择,因为您可以动态添加元素并在发布时循环使用它们。我设想在不

我有一个消息/电子邮件表,希望有一个复选框,可以选择多条消息,并使用表底部的按钮删除它们:

使用标准PHP/HTML非常简单,无需使用框架,您可以:

<input type="checkbox" name="ids[]" value="510">
<input type="checkbox" name="ids[]" value="1231">
如果
FormCollection
支持插入元素,我认为这是最好的选择,因为您可以动态添加元素并在发布时循环使用它们。我设想在不久的将来,
FormCollection
将允许添加元素,取代
MultiCheckbox
MultiRadio
的需要,因为您可以迭代FormCollection并提取各个部分

有没有其他人做过这样的事,你是怎么做的


正如我常说的:框架使困难变得容易,而简单的事情变得困难。

您可以非常轻松地添加新项目:


有一个使用简单Javascript添加新行/项目的示例。

您可以非常轻松地添加新项目:


这里有一个使用简单Javascript添加新行/项的示例。

您是否尝试过在控制器中生成表单?例如:

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();
?>

这将被视为psudocode,可能需要一些调整才能开始工作,但希望它能让您了解如何对问题建模。可能不是最简单的。

您是否尝试过在控制器中生成表单?例如:

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();
?>

这将被视为psudocode,可能需要一些调整才能开始工作,但希望它能让您了解如何对问题建模。可能不是最简单的。

我也在尝试做同样的事情。你有没有想出一个办法来做这件事?我确信我在
集合
多选
中遗漏了一些东西!如果做不到这一点,我将接受@crushedGrass的建议……我认为这在目前是不可能的。集合只能包含字段集,而不能包含单个元素。最后,我在视图中循环了一个数组,手动打印元素,我正试图做完全相同的事情。你有没有想出一个办法来做这件事?我确信我在
集合
多选
中遗漏了一些东西!如果做不到这一点,我将接受@crushedGrass的建议……我认为这在目前是不可能的。集合只能包含字段集,而不能包含单个元素。最后,我只是在视图中循环一个数组,手动打印元素