ZF2 obtiene valores de la base de datos en la clase de formulario

En ZF2, supongamos que tengo un Select en el formulario:

  $this->add([ 'type' => 'Zend\Form\Element\Select', 'name' => 'someName', 'attributes' => [ 'id' => 'some-id', ], 'options' => [ 'label' => 'Some Label', 'value_options' => [ '1' => 'type 1', '2' => 'type 2', '3' => 'type 3', ], ], ]); 

¿Cómo puedo poner los valores ‘tipo 1’, ‘tipo 2’, ‘tipo 3’, etc. desde una consulta de base de datos en value_options ?

Al registrar un elemento de selección personalizado con el administrador de elementos de formulario, puede usar una fábrica para cargar las opciones de formulario requeridas.

 namespace MyModule\Form\Element; class TypeSelectFactory { public function __invoke(FormElementManager $formElementManager) { $select = new \Zend\Form\Element\Select('type'); $select->setAttributes(] 'id' => 'some-id', ]); $select->setOptions([ 'label' => 'Some Label', ]); $serviceManager = formElementManager->getServiceLocator(); $typeService = $serviceManager->get('Some\\Service\\That\\Executes\\Queries'); // getTypesAsArray returns the expected value options array $valueOptions = $typeService->getTypesAsArray(); $select->setValueOptions($valueOptions); return $select; } } 

Y la configuración requerida para module.config.php .

 'form_elements' => [ 'factories' => [ 'MyModule\\Form\\Element\\TypeSelect' => 'MyModule\\Form\\Element\\TypeSelectFactory', ] ], 

A continuación, puede usar MyModule\\Form\\Element\\TypeSelect como el valor de type al agregar el elemento a un formulario.

También asegúrese de leer la documentación relacionada con los elementos de formulario personalizados ; esto describe cómo usar el administrador de elementos de formulario correctamente, esencial para que lo anterior funcione.