我正在尝试从数据库中检索数据(依赖项)并使用返回的值来填充zend表单select元素。
最终值应如下所示:
$this->add(array(
'type' => 'Zend\Form\Element\Select',
'name' => 'jobId',
'options' => array(
'label' => 'countryList',
'value_options' => array(
'1'=>'USA',
'2'=> 'United Kingdom',
etc
'
),
),
'attributes' => array(
'value' => '1' //set selected to '1'
)
));
我使用doctrine2来检索值,即:
public function getOptionsForSelect()
{
$entity = $this->getEntityManager()
->getRepository('Workers\Entity\CountryList')
->findAll();
foreach ($entity as $entity)
{
echo $entity->country;
echo $entity->id;
}
}
上面给出了所有必需的值。然而,我仍然坚持如何将这些值放入一个数组中,这样一旦$this->getOptionsForSelect()
放在表单中,它就会立即填充值;
即。
foreach ($entity as $entity)
{
$id = $entity->id;
$country= $entity->country;
$data['data'] = $id.'=>'.$country;
}
return $data;
表单字段的最终版本如下所示:
$this->add(array(
'name' => 'countrylist',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'countrylist',
'value_options' => $this->getOptionsForSelect(),
'empty_option' => '--- please choose ---'
)
));
答案 0 :(得分:0)
如果我理解正确,您可以实现getOptionsForSelect
,如此:
public function getOptionsForSelect()
{
$entity = $this->getEntityManager()
->getRepository('Workers\Entity\CountryList')
->findAll();
$options = array();
foreach ($entity as $entity) {
$options[$entity->id] = $entity->country;
}
return $options;
}
我没有使用过doctrine,但我希望它有一些方法可以将数据提取为数组,或者至少我可以将它传递给某个序列化对象来实现。
答案 1 :(得分:0)
在ZF2的DoctrineModule中有ObjectSelect / EntitySelect,可以简化这一点 - https://github.com/doctrine/DoctrineModule/blob/master/docs/form-element.md
您不需要自己的getOptionsForSelect(),因为doctrine已经可以处理它了。