php for循环对象-zendform 2表单

时间:2014-01-28 18:23:44

标签: php for-loop zend-framework2

我正在尝试从数据库中检索数据(依赖项)并使用返回的值来填充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 ---'
            )
        ));

2 个答案:

答案 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已经可以处理它了。