Doctrine 2 自定义 ObjectMultiCheckbox 值

Posted

技术标签:

【中文标题】Doctrine 2 自定义 ObjectMultiCheckbox 值【英文标题】:Doctrine 2 customize ObjectMultiCheckbox values 【发布时间】:2015-06-20 05:03:37 【问题描述】:

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

我需要这个来进行自定义视图渲染。我想展示这样的国家/地区:

欧洲 - 瑞典 - 英国 - 还有其他人...

美国 - 加拿大 - 美国 - 其他国家...

【问题讨论】:

您应该将您的解决方案作为答案发布,以便它看起来已解决;) 正如@IvanGabriele 所说,您可以提供自己的答案。当您编辑问题时,底部会显示一个勾选框,上面写着“回答您自己的问题”。这将允许您发布正确的答案,以便其他人可以轻松看到它并且可以将问题标记为已解决。 ;) 【参考方案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(); 这很难看,但它有效!

【讨论】:

你好,很高兴你能解决它并分享,你把这段代码放在哪里以及它是如何工作的? 这段代码存储在 Application\Form\Element\ObjectMultiCheckbox.php 使用很简单,只需将表单元素类型设置为 'Application\Form\Element\ObjectCheckbox' 而不是 'Zend\Form\Element \复选框'。

以上是关于Doctrine 2 自定义 ObjectMultiCheckbox 值的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 Doctrine 2 数据类型的依赖注入

如何生成扩展自定义记录类的 Doctrine 模型/类

Symfony2 & Doctrine:创建自定义 SQL 查询

教义自定义数据类型

Doctrine 实体自定义 getter

Doctrine:这是关系还是自定义数据检索?