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

formularios

Estas en el tema de formularios en el foro de Symfony en Foros del Web. Hola, espero obtener ayuda favorable. lo que pasa es que tengo en la vista un select que cree <select> {% for articulo in articulos %} ...
  #1 (permalink)  
Antiguo 07/11/2013, 15:46
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta formularios

Hola, espero obtener ayuda favorable.
lo que pasa es que tengo en la vista un select que cree
<select>
{% for articulo in articulos %}
<option value="{{articulo.idarticulo}}"> {{ articulo.nombrearticulo}} </opction>
{% endfor%}
</select>

ahora en la clase del formulario ya estaba como lo creo el doctrine
$ builder
.
.
->add('idarticulo')
.
. ;

El problema es que nose como hacer para que lo reconozca el form porque cuando le doy en submit lanza un error que no existe la variable idarticulo en el new.

Alguien me ayuda??
  #2 (permalink)  
Antiguo 07/11/2013, 16:20
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Pareciera que necesitas pasarle el id y el nombre de los articulos que conforman una entidad, de ser así necesitas declarar tu campo de tipo entity. A falta de mas informacion te remito a la documentacion http://symfony.com/doc/current/refer...es/entity.html.
Si sigues con alguna duda coloca aquí como declaraste la definición de tus entidades y que relación existe entre ellas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 07/11/2013, 16:54
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

Gracias hhs, si en efecto lo que necesito es poner los valores de una tabla, he revisado la documentacion pero el problema es que esa entidad no existe en el esquema sino que es de una base externa por eso no puedo hacerla directa con una consulta en el formulario.
  #4 (permalink)  
Antiguo 07/11/2013, 17:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Cita:
Iniciado por ana_arcon Ver Mensaje
Gracias hhs, si en efecto lo que necesito es poner los valores de una tabla, he revisado la documentacion pero el problema es que esa entidad no existe en el esquema sino que es de una base externa por eso no puedo hacerla directa con una consulta en el formulario.
En ese caso supongo que haces un query que te devuelve el id y el nombre con eso crea un arreglo y pasalo a un campo de tipo choise: http://symfony.com/doc/current/refer...es/choice.html

Cuando te refieres a externa es en otro servidor o es otra base de datos en el mismo servidor ???
la pregunta va encaminada a que puedes crear una entidad a partir de una tabla existente, para tu caso articulo y con eso usar entity en tu forma.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 07/11/2013, 20:34
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

pues he hecho esto:
$idarticulos = $conn -> fetchAll("SELECT \"Idarticulo\", \"Nombre\" from
articulos ");
en el newAction, de ahi lo mando a la vista para crear el select.
Que tendria que hacer para mandarlo al form directamente?
  #6 (permalink)  
Antiguo 08/11/2013, 12:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Cita:
Iniciado por ana_arcon Ver Mensaje
pues he hecho esto:
$idarticulos = $conn -> fetchAll("SELECT \"Idarticulo\", \"Nombre\" from
articulos ");
en el newAction, de ahi lo mando a la vista para crear el select.
Que tendria que hacer para mandarlo al form directamente?
El resultado de tu consulta, en este caso $idarticulos lo puedes pasar en el arreglo options cuando construyes tu forma. Tendrias que hacer algo como esto:
Código PHP:
Ver original
  1. $options = array(  
  2.             'form_choice' => array(
  3.                        $idarticulos
  4.                 ),
  5.         );
  6.         $form = $this->createForm(new SectionType(), new Section(), $options );

Dentro tu clase Form:
Código PHP:
Ver original
  1. ->add('idarticulo', 'choice', array(
  2.     'choices'   => array(
  3.        $options['form_choice']
  4.     ),
  5.     'multiple'  => true,
  6. ));
  7.  
  8. public function setDefaultOptions(OptionsResolverInterface $resolver)
  9.     {
  10.         $resolver->setDefaults(array(
  11.             'form_choice' => array()
  12.         ));
  13.     }

Solo recuerda que fechAll te devuelve un arreglo que contiene cada renglón de la tabla, así que tal vez tengas que hacer alguna operación adicional para pasarlo al options y luego al campo dentro del formulario.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 08/11/2013, 15:18
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

ok lo probare, solo tengo una duda, actualmente cuando construyo en form tengo
$entity = new Pago();
$form = $this->createForm(new PagoType(), $entity );

si dejo esto:
$form = $this->createForm(new PagoType(), new Pago(), $options );
ya no le estaria mandando el entity o si?
  #8 (permalink)  
Antiguo 08/11/2013, 16:13
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Cita:
Iniciado por ana_arcon Ver Mensaje
ok lo probare, solo tengo una duda, actualmente cuando construyo en form tengo
$entity = new Pago();
$form = $this->createForm(new PagoType(), $entity );

si dejo esto:
$form = $this->createForm(new PagoType(), new Pago(), $options );
ya no le estaria mandando el entity o si?
Si pasas el $entity o el new Pago() es lo mismo para la clase. La diferencia es que, con la primera forma, la variable $entity puede ser pasada a la vista posteriormente y lo mas seguro que eso es lo que necesitas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 10/11/2013, 22:20
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

Muchas gracias por la ayuda, me ha servido
  #10 (permalink)  
Antiguo 17/11/2013, 15:28
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

Hola, he vuelto a tener problemas con los formularios.
Ahora estoy con otra entidad y he hecho lo mismo pero en este caso la consulta devuelve 2 valores:

$estudio = $em
->createQuery("SELECT (er.id) as id, (e.esNombre) as estudio
FROM ......)
->getResult();

Lo que necesito es que me muestre en el show los nombres pero q guarde los id, que cambios tendria que hacer en este caso? porque ya he probado algunas cosas pero no me funcionan, gracias.
  #11 (permalink)  
Antiguo 20/11/2013, 18:01
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Cita:
Iniciado por ana_arcon Ver Mensaje
Hola, he vuelto a tener problemas con los formularios.
Ahora estoy con otra entidad y he hecho lo mismo pero en este caso la consulta devuelve 2 valores:

$estudio = $em
->createQuery("SELECT (er.id) as id, (e.esNombre) as estudio
FROM ......)
->getResult();

Lo que necesito es que me muestre en el show los nombres pero q guarde los id, que cambios tendria que hacer en este caso? porque ya he probado algunas cosas pero no me funcionan, gracias.
Creo que vamos a necesitar el código para ver con mas detalle lo que quieres hacer.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #12 (permalink)  
Antiguo 20/11/2013, 21:52
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

Cita:
Iniciado por hhs Ver Mensaje
Creo que vamos a necesitar el código para ver con mas detalle lo que quieres hacer.
Lo que quiero es poner el el choice lo que devuelve la consulta, tengo esto en en newAction:
Código PHP:
$estudios$em
            
->createQuery("SELECT (er.id) as id, (e.esNombre) as estudio
                           FROM  myBundle:EstudioRadiologico er, myBundle:Solicitud s, myBundle:EstudioArea ea, myBundle:Estudio e
                           where er.idSolicitud=s.id and s.idEstudioArea=ea.id and ea.idEstudio= e.id
                                 and s.idMntExpediente=$num_exp"
)
                
            ->
getResult();
      
        
$options = array('form_choice' => $estudios);
        
$form   $this->createForm(new DiagnosticoType(), $entity$options); 
En el form:
Código PHP:
$builder
            
            
->add('idEstudioRadiologico''choice', array('choices' => $options['form_choice']))
                    
            ;
 public function 
setDefaultOptions(OptionsResolverInterface $resolver)
    {
        
$resolver->setDefaults(array(
            
'data_class' => 'hnr\sircimBundle\Entity\Diagnostico',
          
'form_choice' => array(),
        ));
        
    } 
Pero nose como hacer para q lo que muestre en el choice sea estudio pero que envie el id a la base, si lo dejo asi como esta me muestra las 2 cosas y no lo quiero asi, si recupero de la consulta solo los id me da un error que lo q envio no es instancia de EstudioRadiologico.
  #13 (permalink)  
Antiguo 21/11/2013, 14:29
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Veo que estas recibiendo un arreglo mas o menos asi:
Código PHP:
Ver original
  1.             array( id => valor, estudio => valor)
  2. }

Y de esa forma en el choice te va repetir el valor de id y el de estudio. Aquí la única opción es que transformes el arreglo devuelto por la consulta a lo que necesitas; es decir un nuevo arreglo donde el valor de id sea tu key y el valor de Estudio el contenido para el key correspondiente del arreglo. O que pienses en alguna otra forma sin usar el choice
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #14 (permalink)  
Antiguo 21/11/2013, 14:38
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

he leido sobre los tipos entity en donde se puede poner el property q entiendo es el valor q se muestra, pero todavia no lo he logrado entender del todo :/ en eso estoy
  #15 (permalink)  
Antiguo 21/11/2013, 22:44
Avatar de ana_arcon  
Fecha de Ingreso: noviembre-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: formularios

mira asi:?

Código PHP:
$resultado$em
            
->createQuery("SELECT (er.id) as id, (e.esNombre) as estudio
                           FROM  myBundle:EstudioRadiologico er, myBundle:Solicitud s, 
                                 myBundle:EstudioArea ea, myBundle:Estudio e
                           where er.idSolicitud=s.id and s.idEstudioArea=ea.id and ea.idEstudio= e.id
                                 and s.idMntExpediente=$num_exp"
)
                
            ->
getResult();
        foreach (
$resultado as $reg)
            { 
              
$estudios$reg->id] = $reg->estudio
              
            }
        return 
$estudios
Pero nose como acceder a los resultados de la consulta, porq los alias no me los acepta
  #16 (permalink)  
Antiguo 21/11/2013, 23:45
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: formularios

Ese tipo de consulta te devuelve un arreglo, usa var_dump para ver la estructura
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: doctrine, symfony2
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 13:53.