2015-04-14 6 views
11

Wie kann ich benutzerdefinierte Werte mit DoctrineModule\Form\Element\ObjectMultiCheckbox?Doctrine 2 anpassen ObjectMultiCheckbox Werte

benutzte ich Zend\Form\Element\MultiCheckbox und ich eingestellten Werte wie folgt aus:

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

Aber jetzt brauche ich Lehre verwenden 2 Multicheckbox und ich brauche Optionen benutzerdefinierten Wert zu setzen. Wie kann ich das machen? diese

Im Moment habe ich nur:

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

Ich brauche dies für benutzerdefinierte Ansicht machen. Ich möchte Ländern wie diese zeigen:

Europa
- Schweden
- Vereinigtes Königreich
- und andere ...

Amerika
- Kanada
- Vereinigte Staaten
- andere Länder ...

+1

Sie sollten Ihre Lösung als Antwort posten, damit es aufgelöst erscheint;) –

+0

Wie @IvanGabriele sagt, können Sie Ihre eigene Antwort liefern. Wenn Sie die Frage bearbeiten, erscheint unten ein Kästchen mit der Aufschrift "Eigene Frage beantworten" **. Auf diese Weise können Sie die richtige Antwort posten, so dass andere sie leicht sehen können und die Frage kann als gelöst markiert werden. ;) – DanielM

Antwort

2

Gelöst!

habe ich ein neues Formularelement:

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

Es ist nicht wirklich schön, aber es Objekt in das Formular als DoctrineModule\Form\Element\ObjectMultiCheckbox zu behandeln.

Meine Entität, die diesen Code verwendet, hat immer ID 'ID', so kann ich statischen Code wie folgt verwenden: $row->getId(); Es ist hässlich, aber es funktioniert!

+0

Hallo, froh, dass du es lösen und teilen könntest, wo hast du diesen Code hingelegt und wie er funktioniert? –

+1

Dieser Codeabschnitt wird in Application \ Form \ Element \ ObjectMultiCheckbox.php gespeichert Using is easy, legen Sie einfach Formularelementtyp als 'Application \ Form \ Element \ ObjectCheckbox' statt 'Zend \ Form \ Element \ Checkbox'. –

Verwandte Themen