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

Pasar un parámetro a un formbuilder

Estas en el tema de Pasar un parámetro a un formbuilder en el foro de Symfony en Foros del Web. Buenos días, tengo una duda por favor. Tengo un formulario creado mediante formbuilder en el que se le asocian elementos a un usuario. El tema ...
  #1 (permalink)  
Antiguo 15/07/2015, 02:22
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta Pasar un parámetro a un formbuilder

Buenos días, tengo una duda por favor.

Tengo un formulario creado mediante formbuilder en el que se le asocian elementos a un usuario.

El tema es que me gustaría pasarle el ID de ese usuario al formbuilder para que no sea necesario seleccionarlo de una infinita lista (el usuario está presente en la URL).

La cosa sería algo así:

$builder->add('reference',"entity",
array('label'=>'Selecciona la referencia','class' => 'AlmacenBundle:reference',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->innerjoin('AlmacenBundle:stock', 's','WITH','s.reference=u.id')
->where('s.user = :user')
->setParameter('user',XXXXXXX);
},
));

¿Cómo podría pasarle ese dato?

Saludos y gracias.
  #2 (permalink)  
Antiguo 15/07/2015, 09:07
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Pasar un parámetro a un formbuilder

Puedes agregarle un constructor a tu Form Type y pasar el usuario en el.
Código PHP:
Ver original
  1. private $user;
  2.    
  3.     public function __construct(UserInterface $user)
  4.     {
  5.         $this->user = $user;
  6.     }
Posterior a eso solo pasalo al closure
Código PHP:
Ver original
  1. $builder->add('reference',"entity",
  2.     array('label'=>'Selecciona la referencia','class' => 'AlmacenBundle:reference',
  3.     'query_builder' => function(EntityRepository $er) use ($this->user) {
  4.         return $er->createQueryBuilder('u')
  5.                 ->innerjoin('AlmacenBundle:stock', 's','WITH','s.reference=u.id')
  6.                 ->where('s.user = :user')
  7.                 ->setParameter('user',$this->user);
  8.     },
  9. ));
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 15/07/2015, 09:18
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Pasar un parámetro a un formbuilder

buenas de nuevo! gracias por tu rápida respuesta.

Obtengo el siguiente error:

Catchable Fatal Error: Argument 1 passed to Almacen\AlmacenBundle\Entity\peticionDevolucion::_ _construct() must be an instance of Almacen\AlmacenBundle\Entity\UserInterface, string given, called in D:\user\htdocs\almacen2\inet-almacen\src\Almacen\AlmacenBundle\Controller\UserC ontroller.php on line 429 and defined in D:\user\htdocs\almacen2\inet-almacen\src\Almacen\AlmacenBundle\Entity\peticionD evolucion.php line 66

y si quito lo siguiente:

public function __construct(UserInterface $user)
{
$this->peticionDevolucionReferences = new \Doctrine\Common\Collections\ArrayCollection();
$this->user = $user;
}

obtengo este error:

FatalErrorException: Compile Error: Cannot use $this as lexical variable in D:\user\htdocs\almacen2\inet-almacen\src\Almacen\AlmacenBundle\Form\Type\User\N ewPeticionDevolucionReferencesForm.php line 28
  #4 (permalink)  
Antiguo 15/07/2015, 09:28
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Pasar un parámetro a un formbuilder

Es solo un ejemplo de lo que debes de hacer. Así que adáptalo a tus necesidades. El error es por que el constructor esta esperando una implementación de la interfaz UserInterfaz y en su lugar le estas dando un cadena de texto.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 15/07/2015 a las 15:19
  #5 (permalink)  
Antiguo 16/07/2015, 01:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Pasar un parámetro a un formbuilder

He intentado aplicar lo que me comentas pero sin éxito. No consigo ver dónde está el error.

Un saludo y gracias.
  #6 (permalink)  
Antiguo 16/07/2015, 08:16
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Pasar un parámetro a un formbuilder

Puedes publicar lo que tienes para ver que estas pasando al formulario y como lo estas haciendo
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 17/07/2015, 02:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 51
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Pasar un parámetro a un formbuilder

Cita:
Iniciado por hhs Ver Mensaje
Puedes publicar lo que tienes para ver que estas pasando al formulario y como lo estas haciendo
Al final he conseguido hacerlo de otra manera (más chapucera pero efectiva). Lo comparto con vosotros por si a alguien le interesa:

1. Paso el parámetro por URL, por ejemplo: https://www.noseque.com/nuevopedido/3

(el 3 sería el ID del usuario).

2. En el formulario, dentro del setDelfaultOptions obtengo el ID de la URL:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(,
'usuario' => substr($_SERVER["REQUEST_URI"],-1),
));
}

3. Luego en el field, dentro de la query, utilizo el parámetro que he obtenido:

$builder->add('reference',"entity",
array('label'=>'Selecciona la referencia','class' => 'AlmacenBundle:reference',
'query_builder' => function(EntityRepository $er) use ($options) {
return $er->createQueryBuilder('u')
->innerjoin('AlmacenBundle:stock', 's','WITH','s.reference=u.id')
->where('s.user = :user')
->setParameter('user', $options['usuario']);
},
));

No es la mejor manera, pero en lo que busco la manera correcta ésta me sirve.

Un saludo y gracias!
  #8 (permalink)  
Antiguo 17/07/2015, 09:07
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Pasar un parámetro a un formbuilder

Karmo te recomiendo que antes de comenzar a hacer cosas con el Framework leas por lo menos el libro oficial de symfony http://symfony.com/doc/current/book/index.html ya que tu ejemplo muestra la forma menos conveniente de hacer las cosas en symfony
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: Ninguno
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 11:15.