Подтвердить что ты не робот

Doctrine 2 настройте значения ObjectMultiCheckbox

Как я могу настраивать значения с помощью DoctrineModule\Form\Element\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'
    )
));

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

Европа
 - Швеция
 - Соединенное Королевство
 - и другие...

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

4b9b3361

Ответ 1

РЕШЕННЫЙ!

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

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(); Это уродливо, но оно работает!