2015-04-14 23 views
11

Come posso personalizzare i valori con DoctrineModule\Form\Element\ObjectMultiCheckbox?Doctrine 2 personalizza i valori ObjectMultiCheckbox

Ho usato Zend\Form\Element\MultiCheckbox e impostare i valori in questo modo:

$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' 
     ) 
    ) 
)) 

Ma ora ho bisogno di usare Doctrine 2 Multicheckbox e ho bisogno di impostare le opzioni di valore personalizzato. Come posso fare questo?

ho attualmente solo questo:

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

ho bisogno di questo per visualizzazione personalizzata di rendering. Voglio mostrare paesi come questo:

Europa
- Svezia
- Regno Unito
- e altri ...

America del
- Canada
- Stati Uniti
- altri paesi ...

+1

È necessario pubblicare la soluzione come risposta in modo che risulti risolta;) –

+0

Come dice @IvanGabriele, è possibile fornire la propria risposta. Quando modifichi la domanda, in fondo c'è una casella di spunta che dice ** "Rispondi alla tua domanda" **. Ciò ti consentirà di pubblicare la risposta corretta in modo che gli altri possano facilmente vederla e la domanda possa essere contrassegnata come risolta. ;) – DanielM

risposta

2

RISOLTO!

Ho creato un nuovo elemento del modulo:

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

Non è davvero bella, ma la maniglia oggetto per il modulo come DoctrineModule\Form\Element\ObjectMultiCheckbox.

La mia entità che utilizza questo codice ha sempre identificativo 'id', quindi posso usare il codice statico come questo: $row->getId(); È brutto, ma funziona!

+0

Ciao, felice che tu possa risolverlo e condividere, dove hai messo questo codice e come funziona? –

+1

Questa parte di codice è archiviata in Application \ Form \ Element \ ObjectMultiCheckbox.php L'utilizzo è semplice, basta impostare il tipo di elemento del modulo come 'Applicazione \ Form \ Elemento \ OggettoCheckbox' invece 'Zend \ Form \ Element \ Checkbox'. –