2015-04-14 24 views
11

Jak mogę ustawić wartości niestandardowe za pomocą DoctrineModule\Form\Element\ObjectMultiCheckbox?Doctrine 2 Dostosuj wartości ObjectMultiCheckbox

użyłem Zend\Form\Element\MultiCheckbox i ustawić wartości tak:

$this->add(array(
    'type' => 'Zend\Form\Element\MultiCheckbox', 
    'name' => 'countries', 
    'options' => array(
     'label' => 'Select countries', 
     'value_options' => array(
      'value' => 1, 
      'label' => 'United Kingdom', 
      'continent' => 'Europe' 
     ) 
    ) 
)) 

Ale teraz muszę używać Doctrine 2 Multicheckbox i muszę ustawić opcje wartość niestandardową. Jak mogę to zrobić?

mam obecnie tylko to:

$this->add(array(
    'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox', 
    'name' => 'countries', 
    'options' => array(
     'object_manager' => $this->em, 
     'target_class' => 'Module\Entity\Country' 
    ) 
)); 

muszę to dla widoku niestandardowego renderowania. Chcę pokazać, kraje takie jak ten:

Europa
- Szwecja
- Wielka Brytania
- i inne ...

Amerykę
- Kanada
- Stany Zjednoczone
- inne kraje ...

+1

Powinieneś zamieścić swoje rozwiązanie jako odpowiedź, aby wyglądało na rozwiązane;) –

+0

Jak mówi @IvanGabriele, możesz podać własną odpowiedź. Kiedy edytujesz pytanie, na dole znajduje się pole wyboru "Odpowiedz na własne pytanie" **. Umożliwi to opublikowanie prawidłowej odpowiedzi, aby inni mogli ją łatwo zobaczyć, a pytanie można oznaczyć jako rozwiązane. ;) – DanielM

Odpowiedz

2

SOLVED!

stworzyłem nowy element forma:

ObjectMultiCheckbox:

namespace Application\Form\Element; 

use Zend\Form\Element\MultiCheckbox; 
use Zend\Stdlib\ArrayUtils; 

class ObjectMultiCheckbox extends MultiCheckbox 
{ 
    public function setValue($value) 
    { 
     if ($value instanceof \Traversable) 
     { 
      $value = ArrayUtils::iteratorToArray($value); 

      foreach ($value as $key => $row) 
      { 
       $values[] = $row->getId(); 
      } 

      return parent::setValue($values); 
     } 
     elseif ($value == null) 
     { 
      return parent::setValue(array()); 
     } 
     elseif (!is_array($value)) 
     { 
      return parent::setValue((array)$value); 
     } 
    } 
} 

To nie jest naprawdę ładny, ale uchwyt obiektu do postaci DoctrineModule\Form\Element\ObjectMultiCheckbox.

Moja encja, która używa tego kodu, ma zawsze identyfikator "id", więc mogę używać statycznego kodu w następujący sposób: $row->getId(); To brzydkie, ale działa!

+0

Witam, cieszę się, że mogłeś go rozwiązać i udostępnić, gdzie umieściłeś ten kod i jak to działa? –

+1

Ten fragment kodu jest przechowywany w aplikacji \ Form \ Element \ ObjectMultiCheckbox.php Użycie jest proste, wystarczy ustawić typ elementu formularza jako "Aplikacja \ Formularz \ Element \ ObjectCheckbox" zamiast "Zend \ Form \ Element \ Checkbox". –