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

Formularios y type entity (DUDA)

Estas en el tema de Formularios y type entity (DUDA) en el foro de Symfony en Foros del Web. Buenas de nuevo! esta semana estoy cañón con el tema, y es que aunque algo sé de symfony siempre me voy encontrando temas que no ...
  #1 (permalink)  
Antiguo 17/07/2015, 02:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta Formularios y type entity (DUDA)

Buenas de nuevo! esta semana estoy cañón con el tema, y es que aunque algo sé de symfony siempre me voy encontrando temas que no sé cómo resolver. Y la verdad es que por aquí ayudáis mucho y es de agradecer.

Me encuentro con un nuevo muro delante mío, os explico.

Tengo una entity llamada "Referencias" en la que, entre otros, tengo los siguientes campos:
  • Referencia
  • Descripción
  • Código EAN

Por otro lado tengo una entidad de Pedidos y Pedidos_Referencias en la que la segunda se comporta como un "collection" en los forms. En la segunda (Pedidos_Referencias) tengo una clave foránea (Reference) que apunta a la entidad "Referencias".

Para terminar, tengo el formulario correspondiente en el que registro las referencias que se piden en un pedido, con el típico campo entity:

Código PHP:
$builder->add('reference',"entity",
            array(
'label'=>'Descripción:','class' => 'AlmacenBundle:Reference',
                
'required'=>false
                
'query_builder' => function(EntityRepository $er) {
                    return 
$er->createQueryBuilder('u')
                        ->
orderBy('u.description''ASC');
                },
)); 
El tema es que me piden que en éste formulario se pueda seleccionar también la referencia no solo por la descripción, sino por el código de referencia y por el código EAN. (los otros campos que aparecen en la entidad Referencia que indico más arriba).

Cuando agrego esos campos al formulario queda como lo siguiente:

Código PHP:
        $builder->add('referenceCode',"entity",
            array(
'label'=>'Código(AU):',
                
'class' => 'AlmacenBundle:reference',
                
'property' => 'name',
                
'required'=>false));


        
$builder->add('referencePN',"entity",
            array(
'label'=>'PN:','class' => 'AlmacenBundle:Reference'
                
'property' => 'ean',
                
'required'=>false,
                
'query_builder' => function(EntityRepository $er) {
                    return 
$er->createQueryBuilder('u')
                        ->
andwhere('u.ean <> :ean')
                        ->
orderBy('u.ean''ASC')
                        ->
setParameter('ean''');
                },
            ));

        
$builder->add('reference',"entity",
            array(
'label'=>'Descripción:','class' => 'AlmacenBundle:Reference',
                
'required'=>false
                
'query_builder' => function(EntityRepository $er) {
                    return 
$er->createQueryBuilder('u')
                        ->
orderBy('u.description''ASC');
                },
            )); 
Hasta aquí ningún problema, el formulario me pinta lo que ha de pintar. El problema viene en la parte del controlador. Cuando envío el formulario, evidentemente me indica que los otros campos no existen en la entidad "Pedidos_Referencias", y no existen los métidos Get.

El caso es que yo no quiero registrar esos datos en la BD al enviar el formulario, sino primero comprobar qué ha selccionado el usuario (Si la referencia por Código, descripción, o Código de barrras), luego buscar el ID de esa referencia y entonces sí registrarlo en la "Pedidos_referencia".

Alguna sugerencia para saltarme los errores de "No existe el método Get en la entidad Pedidos_Referencia"?
  #2 (permalink)  
Antiguo 17/07/2015, 08:09
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Formularios y type entity (DUDA)

Lo mas sencillo para resolver el problema es que agregues la propiedad mapped y ponerla a false:
Código PHP:
Ver original
  1. $builder->add('referencePN',"entity",
  2.             array('label'=>'PN:','class' => 'AlmacenBundle:Reference',
  3.                 'property' => 'ean',
  4.                 'required'=>false,
  5.                 'query_builder' => function(EntityRepository $er) {
  6.                     return $er->createQueryBuilder('u')
  7.                         ->andwhere('u.ean <> :ean')
  8.                         ->orderBy('u.ean', 'ASC')
  9.                         ->setParameter('ean', '');
  10.                 },
  11.                 'mapped' => false,
  12. ));
de esa forma los campos que agregas de forma adicional no serán tomados en cuenta al momento de llenar la entidad.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 21/07/2015, 05:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Formularios y type entity (DUDA)

muchas gracias! me sirvió!

Ojalá tuviese más tiempo para leerme el libro de Symfony tranquilamente...
  #4 (permalink)  
Antiguo 21/07/2015, 10:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Formularios y type entity (DUDA)

Una pregunta, el tema es que luego un var_dump no me muestra los otros campos recogidos en el formulario :S (los que no están en el entity). Puede ser?
  #5 (permalink)  
Antiguo 21/07/2015, 13:33
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Formularios y type entity (DUDA)

Para recuperar los campos desde el controller tienes que usar get() de la siguiente forma:
Código PHP:
Ver original
  1. $value = $form->get('referencePN')->getData();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 22/07/2015, 00:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Formularios y type entity (DUDA)

Buenas hhs,

Lo he probado y obtengo el siguiente error:

Child "referencePN" does not exist.

Esta es la parte del form:

Código PHP:
Ver original
  1. $builder->add('referencePN',"entity",
  2.             array('label'=>'PN:','class' => 'AlmacenBundle:Reference',
  3.                 'property' => 'ean',
  4.                 'required'=>false,
  5.                 'query_builder' => function(EntityRepository $er) {
  6.                     return $er->createQueryBuilder('u')
  7.                         ->andwhere('u.ean <> :ean')
  8.                         ->orderBy('u.ean', 'ASC')
  9.                         ->setParameter('ean', '');
  10.                 },
  11.                 'mapped' => false,
  12.             ));

Y esta la parte del controller:

Código PHP:
Ver original
  1. if ($request->isMethod("GET")) {
  2.  
  3.             $form->bind($request);
  4.  
  5.             if ($form->isValid()) {
  6.                 $em = $this->getDoctrine()->getManager();
  7.  
  8.                 $pn = $form->get('referencePN')->getData();
  9.                 echo $pn;
  10.                 .....

Como comentario, el campo que no rescato forma parte de un form collection.
  #7 (permalink)  
Antiguo 22/07/2015, 12:40
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Formularios y type entity (DUDA)

Entonces tiene que hacer el get al nombre que tiene el collection eso te va a devolver el form que esta dentro de el.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 23/07/2015, 02:09
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Formularios y type entity (DUDA)

Buenas de nuevo hhs,

Sigo teniendo el mismo problema. Solo me recoge aquellos campos del form que existen en la entidad. Aquellos que tengo como "mapped -> false" no me los recoge.

Cuando envío un formulario y mediante "var_dump($peticionMaterial->getPeticionMaterialReferences());" obtengo esto:

(peticionMaterial sería la entidad principal y PeticionMaterialReferences el que contiene el array collection)

object(Doctrine\Common\Collections\ArrayCollection )[372]
private '_elements' =>
array (size=1)
'form_referencias' =>
object(Almacen\AlmacenBundle\Entity\peticionMateri alReferences)[2171]
private 'id' => null
protected 'peticionMaterial' =>
object(Almacen\AlmacenBundle\Entity\peticionMateri al)[675]
...
private 'reference' =>
object(Almacen\AlmacenBundle\Entity\reference)[1439]
...
private 'referenceState' =>
object(Almacen\AlmacenBundle\Entity\referenceState )[2173]
...
private 'cantidad' => int 10
private 'cantidadServida' => null
private 'comments' => null
private 'averiaCode' => string '45456' (length=5)
private 'peticionType' =>
object(Almacen\AlmacenBundle\Entity\peticionMateri alType)[2186]
...

Los "private" correctos, ya que están declarados en la entidad. Aquellos que no están declarados no me los recoge.

¿A qué puede ser debido?
  #9 (permalink)  
Antiguo 27/07/2015, 09:07
 
Fecha de Ingreso: julio-2011
Ubicación: Bogotá
Mensajes: 34
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Formularios y type entity (DUDA)

Sabes yo que hubiere hecho. En la entidad, hago un método get que una los dos campos y luego lo muestro en el formulario. Me explico

/**
* Get campo1 . campo2
*
* @return string
*/
public function getNuevoCampoConcatenado()
{
return $this->getCampo1() . ' - ' . $this->getCampo2();
}

Etiquetas: entity, formularios, type
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 09:45.