2013-08-05 3 views
2

Я получил таблицу сообщений/писем и хочу иметь флажок, чтобы выбрать несколько сообщений и удалить их с помощью кнопки в нижней части таблицы:ZF2 - Флажки в строках таблицы

Typical table

Мертвого простой со стандартной PHP/HTML без использования рамки вы можете:

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

Затем в PHP проходного массива идентификаторов, которые были выбраны. Я пытаюсь добиться того же самого с 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 поддерживается вставка элементов, я бы сказал, что это лучший вариант, так как вы можете динамически добавлять их и цикл через них, когда вывешенным. Я полагаю, в ближайшем будущем FormCollection позволит добавлять элементы, заменяя необходимость MultiCheckbox и MultiRadio, как вы могли бы итерацию через FormCollection и извлекать отдельные части

Кто-нибудь еще сделать что-то вроде этого, как вы идете по этому поводу?

Как я всегда говорю: Рамки облегчают работу, а легкие вещи сложны.

+0

Я пытаюсь сделать то же самое. Вы разработали метод * Zend * для этого? Я уверен, что есть кое-что, что я пропускаю либо с 'Collections', либо' MultiSelect'! В противном случае я пойду с предложением @ crushedGrass ... – AlexP

+0

Я не верю, что в настоящее время это возможно Zend. Коллекции могут содержать только Fieldsets, а не отдельные элементы. В конце я просто зациклился на массиве в представлении, напечатав элементы вручную –

ответ

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); 
     } 
    } 
} 

Это следует рассматривать psudocode и может принять некоторые настройки, чтобы получить работу, но, надеюсь, это даст вам представление о том, как вы можете моделировать вашу проблему. Не может быть самым простым.

Смежные вопросы