原则 2 自定义对象多复选框值



如何使用DoctrineModuleFormElementObjectMultiCheckbox自定义值?

我使用了ZendFormElementMultiCheckbox,并设置了这样的值:

$this->add(array(
    'type' => 'ZendFormElementMultiCheckbox',
    'name' => 'countries',
    'options' => array(
        'label' => 'Select countries',
        'value_options' => array(
            'value' => 1,
            'label' => 'United Kingdom',
            'continent' => 'Europe'
        )
    )
))

但是现在我需要使用原则 2 Multicheckbox并且我需要设置自定义值选项。我该怎么做?

我目前只有这个:

$this->add(array(
    'type' => 'DoctrineModuleFormElementObjectMultiCheckbox',
    'name' => 'countries',
    'options' => array(
        'object_manager' => $this->em,
        'target_class'   => 'ModuleEntityCountry'
    )
));

我需要这个来自定义视图渲染。我想向这样的国家展示:

欧洲 - 瑞典 - 英国
- 和其他...

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

解决了!
我创建了一个新的表单元素:

对象多复选框:

namespace ApplicationFormElement;
use ZendFormElementMultiCheckbox;
use ZendStdlibArrayUtils;
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);
        }
    }
}

它不是很漂亮,但它将对象处理为表单DoctrineModuleFormElementObjectMultiCheckbox

我使用此代码的实体始终具有标识符"id",因此我可以像这样使用静态代码: $row->getId(); 这很丑陋,但它有效!

相关内容

  • 没有找到相关文章

最新更新