2015-04-14 32 views
11

DoctrineModule\Form\Element\ObjectMultiCheckbox ile nasıl özel değerler yapabilirim? Doctrine 2 özelleştirme ObjectMultiCheckbox değerleri

ben Zend\Form\Element\MultiCheckbox kullanılan ve böyle değerleri ayarlayın:

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

Ama şimdi Doctrine 2 Multicheckbox kullanmak gerekir ve ben özel değerinin seçeneklerini ayarlamak gerekir. Bunu nasıl yapabilirim?

Şu anda tek bu:

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

Bu özel bir görünüm için işlemek gerekir. ...

America
ve diğerleri - - Kanada
- ABD
İsveç
- - Birleşik Krallık

Avrupa
: Böyle ülkeleri göstermek istiyorum - diğer ülkeler ...

+1

Çözümünüzü yanıt olarak görebilmeniz için bir çözüm olarak göndermelisiniz;) –

+0

@IvanGabriele, kendi cevabınızı sağlayabileceğinizi söylüyor. Soruyu düzenlediğinizde, altta ** "Kendi sorunuzu cevaplayın" ** yazan bir onay kutusu var. Bu, diğer kişilerin kolayca görebilmeleri ve sorunun çözülebilmesi için doğru cevabı göndermenizi sağlayacaktır. ;) – DanielM

cevap

2

SOLVED!

ObjectMultiCheckbox: Gerçekten çok ama DoctrineModule\Form\Element\ObjectMultiCheckbox olarak forma nesneyi işlemek değil

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



Ben yeni form öğesi yarattı.

Bu kodu kullanan varlığım her zaman 'id' tanımına sahip oldu, bu nedenle statik kodu şu şekilde kullanabilirim: $row->getId(); Çirkin ama işe yarıyor!

+0

Merhaba, çözebildiğiniz ve paylaştığınız için memnun oldunuz, bu kodu nereye koydunuz ve nasıl çalışıyor? –

+1

Bu kod parçası, Application \ Form \ Element \ ObjectMultiCheckbox.php 'da depolanmıştır. Kullanımı kolaydır, 'Formun \ Form \ Öğe \ ObjectCheckbox' yerine form öğesi türünü 'Zend \ Form \ Element \ Checkbox' olarak ayarlayın. –

İlgili konular