Doctrine 2 自定义 ObjectMultiCheckbox 值

11

如何使用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'
    )
));

我需要这个来进行自定义视图渲染。我想像这样显示国家: 欧洲
- 瑞典
- 英国
- 其他国家... 美洲
- 加拿大
- 美国
- 其他国家...

1
你应该将你的解决方案发布为一个答案,这样它就会显示为已解决 ;) - Ivan Gabriele
正如 @IvanGabriele 所说,您可以提供自己的答案。当您编辑问题时,在底部有一个复选框,上面写着“回答您自己的问题”。这将允许您发布正确的答案,以便其他人可以轻松查看,并标记问题为已解决。 ;) - DanielM
1个回答

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();虽然不太好看,但它能正常工作!


你好,很高兴你能解决问题并分享经验。请问你把这段代码放在哪里了?它是如何工作的呢? - digoferra
1
这段代码存储在Application\Form\Element\ObjectMultiCheckbox.php中。使用很容易,只需将表单元素类型设置为“Application\Form\Element\ObjectCheckbox”而不是“Zend\Form\Element\Checkbox”。 - user4787666

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接