Foros del Web » Programando para Internet » PHP » Zend »

Como llenar un select desde la base de datos?

Estas en el tema de Como llenar un select desde la base de datos? en el foro de Zend en Foros del Web. hola a todos, he realizo el getting started de la pagina de zf2 he avanzado un poco en mi propio proyecto segun la guia de ...
  #1 (permalink)  
Antiguo 21/03/2013, 15:01
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 0
Como llenar un select desde la base de datos?

hola a todos, he realizo el getting started de la pagina de zf2 he avanzado un poco en mi propio proyecto segun la guia de zend. pero ahora llegue a un inconveniente que describo asi:


tengo 2 tablas User y Portal con estructura:

User Portal
id id
name name
........ url
portal_id


para la creacion de User necesito llenar un combo con los datos almancenados en portal, por lo cual en mi UserForm la tengo definida asi:


Código PHP:
<?php
namespace RegisterForm
;

use 
ZendDiServiceLocator;

use 
ZendCaptchaAdapterInterface as CaptchaAdapter;
use 
ZendFormForm;
use 
ZendFormElement;

class 
UserForm extends Form
{
    
//     protected $captcha;

    
public function __construct($name null)
    {
        
parent::__construct('user');
        
$this->setAttribute('method''post');
        
$this->setAttribute('class''form-horizontal');

        
$this->add(array(
                
'name' => 'id',
                
'attributes' => array(
                        
'type'  => 'hidden',
                ),
        ));

        
$this->add(array(
                
'type' => 'Select',
                
'name' => 'portal_id',
                
'options' => array(
                        
'label' => 'Portal',
                        
'empty_option' => 'Seleccione un portal',
                        
'value_options' => array(
                                
'1' => 'Portal 1',
                                
'2' => 'Portal 2',
                                
'3' => 'Portal 3',
                        ),
                        
                )
        ));

        
$this->add(array(
                
'name' => 'firstName',
                
'attributes' => array(
                        
'type'  => 'text',
                ),
                
'options' => array(
                        
'label' => 'First Name',
                ),
        ));

        
$this->add(array(
                
'name' => 'lastName',
                
'attributes' => array(
                        
'type'  => 'text',
                ),
                
'options' => array(
                        
'label' => 'Last Name',
                ),
        ));
        
$this->add(array(
                
'name' => 'login',
                
'attributes' => array(
                        
'type'  => 'text',
                ),
                
'options' => array(
                        
'label' => 'Login',
                ),
        ));

        
$this->add(array(
                
'name' => 'password',
                
'attributes' => array(
                        
'type'  => 'password',
                ),
                
'options' => array(
                        
'label' => 'Password',
                ),
        ));

        
$this->add(array(
                
'name' => 'password_repeat',
                
'attributes' => array(
                        
'type'  => 'password',
                ),
                
'options' => array(
                        
'label' => 'password (repeat)',
                ),
        ));

        
$this->add(array(
                
'name' => 'email',
                
'attributes' => array(
                        
'type'  => 'text',
                ),
                
'options' => array(
                        
'label' => 'Email',
                ),
        ));


            
$this->add(array(
                
'name' => 'submit',
                
'attributes' => array(
                        
'type'  => 'submit',
                        
'value' => 'Go',
                        
'id' => 'submitbutton',
                ),
        ));
    }
}
de la clase anterior lo único necesario del problema es ver el elemento Select, actualmente esta llenado de forma estático con 3 valores: portal 1, portal 2 y portal 3.


Código PHP:
$this->add(array(
                
'type' => 'Select',
                
'name' => 'portal_id',
                
'options' => array(
                        
'label' => 'Portal',
                        
'empty_option' => 'Seleccione un portal',
                                                
// agregar arreglo con opciones de la base de datos
                        
'value_options' => array(
                                
'1' => 'Portal 1',
                                
'2' => 'Portal 2',
                                
'3' => 'Portal 3',

                        ),
                        
                )
        )); 
Espero explicarlo de manera adecuada, gracias por su ayuda.
  #2 (permalink)  
Antiguo 21/03/2013, 15:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como llenar un select desde la base de datos?

Puedes hacerlo de varias formas, una es que desde el mismo form consultes la base de datos y lo insertes, otro es que cuando crees la forma, uses setMultiOptions el elemento para llenarlo.

Saludos.
  #3 (permalink)  
Antiguo 21/03/2013, 15:23
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Como llenar un select desde la base de datos?

gracias compañero, me podrias dar un ejemplo de como hacerlo.. soy nuevo en zf2 y no he dado con la forma de hacerlo.
  #4 (permalink)  
Antiguo 21/03/2013, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como llenar un select desde la base de datos?

Pues usa la forma como te digo, tienes dos, ahora lo mejor creo yo es que uses inyección de dependencias, o sea que tu DbTable o lo que uses como comunicación con la base de datos se lo inyectes a tu forma, para que cuando lo jales del ServiceLocator ya venga configurada tu forma.
  #5 (permalink)  
Antiguo 21/03/2013, 15:33
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Como llenar un select desde la base de datos?

Cita:
Iniciado por GatorV Ver Mensaje
Pues usa la forma como te digo, tienes dos, ahora lo mejor creo yo es que uses inyección de dependencias, o sea que tu DbTable o lo que uses como comunicación con la base de datos se lo inyectes a tu forma, para que cuando lo jales del ServiceLocator ya venga configurada tu forma.
si claro, la cuestion es que no se como implementarlo en el codigo, me gustaria hacerlo sobre la ClassForm he visto en la pagina de zf2 pero no he encontrado en zend un ejemplo claro para este tipo de problemas.
  #6 (permalink)  
Antiguo 21/03/2013, 16:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como llenar un select desde la base de datos?

Si lo quieres hacer directo, tendrías que inyectarle a tu form como te digo usando el ServiceLocator que le pases la dependencia a tu clase DBTable o si usas Doctrine, el chiste es pasarle el DAO que necesitas a tu form, para que lo puedas leer adentro de tu form y extraer lo necesario.
  #7 (permalink)  
Antiguo 21/03/2013, 16:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Como llenar un select desde la base de datos?

Mira aquí tienes un ejemplo bastante claro, no usa Bases de Datos como tal pero eso ya es lo de menos, el chiste es que veas como hacerlo usando el ServiceLocator:

http://blog.james-carr.org/2012/09/1...d-framework-2/

Etiquetas: zf2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:15.