2015-04-14 2 views
11

Как я могу настроить собственные значения с помощью DoctrineModule\Form\Element\ObjectMultiCheckbox?Doctrine 2 настроить значения ObjectMultiCheckbox

Я использовал Zend\Form\Element\MultiCheckbox и я установить значения, как это:

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

Но теперь мне нужно использовать Doctrine 2 Multicheckbox и мне нужно установить пользовательские параметры значения. Как я могу это сделать?

У меня в настоящее время только это:

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

мне это нужно для пользовательского вида визуализации. Я хочу, чтобы показать такие страны, как это:

Европа
- Швеция
- Великобритания
- и другие ...

Америка
- Канада
- Соединенные Штаты
- другие страны ...

+1

Вы должны отправить свое решение в качестве ответа, чтобы оно было разрешено;) –

+0

Как говорит @IvanGabriele, вы можете предоставить свой собственный ответ. Когда вы редактируете вопрос, внизу находится галочка, в которой говорится: «Ответьте на свой вопрос» **. Это позволит вам опубликовать правильный ответ, чтобы другие могли его легко увидеть, и вопрос может быть помечен как разрешенный. ;) – DanielM

ответ

2

РЕШЕННЫЙ!

Я создал новый элемент формы:

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

Это не очень красиво, но обрабатывать объект в форме DoctrineModule\Form\Element\ObjectMultiCheckbox.

Мое сущность, использующая этот код, всегда имеет идентификатор 'id', поэтому я могу использовать статический код так: $row->getId(); Это уродливо, но оно работает!

+0

Здравствуйте, рад, что вы смогли решить эту проблему и поделиться ею, где вы положили этот код и как он работает? –

+1

Этот фрагмент кода хранится в Application \ Form \ Element \ ObjectMultiCheckbox.php Использование легко, просто установите тип элемента элемента как «Application \ Form \ Element \ ObjectCheckbox» вместо «Zend \ Form \ Element \ Checkbox». –

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