如何使用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();
这很丑陋,但它有效!