Zend framework Zend-动态表单下拉列表

Zend framework Zend-动态表单下拉列表,zend-framework,doctrine,dropdown,zend-form,Zend Framework,Doctrine,Dropdown,Zend Form,我从zend framework开始,在实现动态下拉列表时遇到了问题 我需要创建一个从数据库中选择的事件的简单下拉列表 这是我的模块类: public function getFormElementConfig() { return array( "factories" => [ 'participant_form' => function (ServiceManager $serviceManager) {

我从zend framework开始,在实现动态下拉列表时遇到了问题

我需要创建一个从数据库中选择的事件的简单下拉列表

这是我的模块类:

public function getFormElementConfig()
{
    return array(
        "factories" => [
            'participant_form' => function (ServiceManager $serviceManager) {

                /** @var EntityManager $entityManager */
                $entityManager = $serviceManager->get("doctrine.entitymanager.orm_default");

                $events = $entityManager->getRepository('Application\Entity\Event')->findAll();
                $eventForSelect = array();
                foreach ($events as $event) {
                  $eventForSelect[$event->getId()] = $event->getName();
                }

                /** @var \Zend\Form\Form $form */
                $form = new ParticipantForm();
                $form->setHydrator(new DoctrineHydrator($entityManager));
                $form->setObject(new Participant());

                $form->setOption('event_for_select', $eventForSelect);

                return $form;

            },
        ]
    );
}
但我不知道如何在我的表格中获得“事件”选项:

class ParticipantForm extends Form
{
  public function __construct($name = null)
  {

    parent::__construct('user');

    $this->setAttribute('class', 'form-horizontal');

    $this->add([
        'name' => 'id',
        'type' => 'Hidden',
    ]);

    $this->add([
        'name'    => 'firstname',
        'type'    => 'Text',
        'options' => [
            'label' => 'Prénom',
        ],
    ]);

    $this->add([
        'name'    => 'event',
        'type'    => 'Select',
        'options' => [
                 'label' => 'Event',
                 'value_options' => // ?? $event_for_select

         ],
    ]);

谢谢你的帮助

在表单类中添加字段:

class ParticipantForm extends Form
{
    protected $eventForSelect;

    public function setEventForSelect($eventForSelect)
    {
        $this->eventForSelect = $eventForSelect;

        // update field value options
        $this->get('event')
             ->setValueOptions($this->eventForSelect);

        return $this;
    }

    // rest of form class code
}
然后在工厂中使用
setEventForSelect()
方法:

/** @var \Zend\Form\Form $form */
$form = new ParticipantForm();
$form->setHydrator(new DoctrineHydrator($entityManager));
$form->setObject(new Participant());

$form->setEventForSelect($eventForSelect);

return $form;
然后在形式上:

$this->add([
    'name'    => 'event',
    'type'    => 'Select',
    'options' => [
        'label' => 'Event',
        'value_options' => $this->eventForSelect,
     ],
]);

谢谢,但是$this->eventForSelect在“value\u options”部分中的值现在为空。eventForSelect是在赋值给value_选项后设置的。你有解决这个问题的办法吗?你说得对,我忘了。我编辑了我的答案-请参阅setEventForSelect()方法的新内容。您应该到达“event”元素并使用setValueOptions设置其值选项,如上所述。