Zend framework Zend-动态表单下拉列表
我从zend framework开始,在实现动态下拉列表时遇到了问题 我需要创建一个从数据库中选择的事件的简单下拉列表 这是我的模块类: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) {
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设置其值选项,如上所述。