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

[SOLUCIONADO] Clase Type: enviar un parametro

Estas en el tema de Clase Type: enviar un parametro en el foro de Symfony en Foros del Web. Hola que tal amigos... me pregunta si nosotros podemos enviar un parametro "x" a una clase tipo type. esta es mi clase type Código PHP: ...
  #1 (permalink)  
Antiguo 29/05/2015, 08:41
 
Fecha de Ingreso: mayo-2015
Mensajes: 50
Antigüedad: 8 años, 10 meses
Puntos: 0
Clase Type: enviar un parametro

Hola que tal amigos... me pregunta si nosotros podemos enviar un parametro "x" a una clase tipo type.

esta es mi clase type
Código PHP:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder
            
->add('nombre')
            
//->add('dictadomateria')
            
                
->add('dictadomateria''entity', array(
                    
'class' => 'JHONATHANSicondcBundle:Dictadomateria',
                    
'query_builder' => function(EntityRepository $er) {
                        return 
$er->createQueryBuilder('dm')
                                ->
select('dm')
                                ->
where('dm.docente = [COLOR="Red"]1[/COLOR]')

                        ;
                    }
                ))
        ;
    } 
Ahora dictado materia tiene los id de docentes,cursos,materias y periodo actual. y el capitulo tiene el id de dictado materia.. por lo que al momento de llamar a la clase se me enviaba los datos de toditos los docentes con sus asignaturas ect.

Por lo que lo al ->add('dictadomateria') lo modifique para que me envie solo los datos de un determinado docente, pero el probleme es como le envio el id del docente.. en mi actual consulta le tengo agragado el numero 1 del primer docente ahora como le envio el id del docente de forma dinamica..

mi controlador es el siguiente
Código PHP:
public function capitulomodificarAction($id) {
        
$em $this->getDoctrine()->getManager();
        
$did=1;
        
$periodo $em->getRepository('JHONATHANSicondcBundle:Periodo')->getperiodoactual();
        
$request $this->getRequest();
        
$materiasxdocente $em->getRepository('JHONATHANSicondcBundle:Capitulo')->getmateriasdocente($did,$periodo->getId());
        
$entity $em->getRepository('JHONATHANSicondcBundle:Capitulo')->findOneBy(array('id' => $id));
        
$datos $em->getRepository('JHONATHANSicondcBundle:Capitulo')->getcapitulos($id,$periodo->getId());
        
$form $this->createForm(new CapituloType(), $entity);
        
$form->handleRequest($request);
        
$entities $em->getRepository('JHONATHANSicondcBundle:Tema')->findAll();
        if (
$form->isValid()) {
            
$em->persist($entity);
            
$em->flush();
            
$this->get('session')->getFlashBag()->add('Info''Capítulo Modificado Correctamente ');
            
            
        }
        return 
$this->render('JHONATHANSicondcBundle:Default:capitulo_modificar.html.twig', array(
                    
'entities' => $entities,
                    
'id' => $id,
                    
'datos'=>$datos,
                    
'materiasxdocente'=> $materiasxdocente,
                    
'formulario' => $form->createView()
                        )
        );
    } 
Me funciona pero con el id estatico del docente 1..

Por favor ayudenme
  #2 (permalink)  
Antiguo 29/05/2015, 15:19
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: Clase Type: enviar un parametro

Puedes pasar el objeto mediante el constructor, en el manual vienen unos ejemplos.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 01/06/2015, 08:15
 
Fecha de Ingreso: mayo-2015
Mensajes: 50
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Clase Type: enviar un parametro

Muchísimas gracias por tu respuesta..
  #4 (permalink)  
Antiguo 03/06/2015, 15:45
 
Fecha de Ingreso: mayo-2015
Mensajes: 50
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Clase Type: enviar un parametro

he tratado de enviar el parámetro(id cápitulo) mediante el constructor de la Clase Dictado

Código PHP:
public function setTema(JHONATHANSicondcBundleEntityTema $tema null)
    {
        
$this->tema $tema;
        return 
$this;
    }
    
/**
     * Get tema
     *
     * @return \JHONATHAN\SicondcBundle\Entity\Tema 
     */
    
public function getTema()
    {
        return 
$this->tema;
    }
    
     public function 
__toString() {
        return 
$this->getNombre();
    }
    
    protected 
$capituloId;
    
    
    function 
__construct($capituloId) {
        
$this->capituloId $capituloId;
    } 
y lo estoy enviando por el controlador
Código PHP:
 public function escogertemasAction($id) {....} 
el Id capitulo lo estoy obteniendo mediante seleccione un capitulo y de ahí estoy creando el form Dictado que tiene los temas del tipo objeto temas y una observación.

y la clase Dictadotype tengo la siguiente
Código PHP:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder
            
->add('fecha')
            ->
add('observacion')
            ->
add('tema''entity', array(
                    
'class' => 'JHONATHANSicondcBundle:Tema',
                    
'query_builder' => function(EntityRepository $er) {
                        return 
$er->createQueryBuilder('t')
                                ->
select('t')
                                ->
where('t.capitulo =:capituloId')

                        ;
                    }
                ))
        ;
    }
    
    
/**
     * @param OptionsResolverInterface $resolver
     */
    
public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        
$resolver->setDefaults(array(
            
'data_class' => 'JHONATHAN\SicondcBundle\Entity\Dictado','capitulo'=>capituloId
        
));
    }

    
/**
     * @return string
     */
    
public function getName()
    {
        return 
'jhonathan_sicondcbundle_dictado';
    } 


y me sale el siguiente error...

Notice: Use of undefined constant capituloId - assumed 'capituloId' in C:\xampp\htdocs\SICONDC\src\JHONATHAN\SicondcBundl e\Form\DictadoType.php line 40
  #5 (permalink)  
Antiguo 04/06/2015, 06:40
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Clase Type: enviar un parametro

El error está acá:

Código PHP:
/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    
$resolver->setDefaults(array(
        
'data_class' => 'JHONATHAN\SicondcBundle\Entity\Dictado','capitulo'=>capituloId
    
));

Falta el signo $ para la variable:

Código PHP:
/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    
$resolver->setDefaults(array(
        
'data_class' => 'JHONATHAN\SicondcBundle\Entity\Dictado','capitulo'=>$capituloId
    
));

  #6 (permalink)  
Antiguo 04/06/2015, 08:05
 
Fecha de Ingreso: mayo-2015
Mensajes: 50
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Clase Type: enviar un parametro

Gracias por tu respuesta, según estaba investigando la forma que lo estaba haciendo es para formularios embebidos y en mi caso no lo necesito..

por eso busque y encontré lo siguiente:

el constructor de mi clase Dictado es el siguiente:
Código PHP:
protected $capituloId;
    
    function 
__construct($capituloId) {
        
$this->capituloId $capituloId;
    } 
mi clase type es la siguiente:
Código PHP:

 
public function buildForm(FormBuilderInterface $builder, array $options) {
        
        
$capituloId $this->capituloId;
        
$builder
                
->add('fecha')
                ->
add('observacion')
                ->
add('tema''entity', array(
                    
'class' => 'JHONATHANSicondcBundle:Tema',
                    
'query_builder' => function(EntityRepository $er)
                    use (
$capituloId
             {
                return 
$er->createQueryBuilder('t')
                        ->
select('t')
                        ->
where('t.capitulo =: capituloId')
                        ->
setParameter('capituloId'$capituloId)
                ;
            }
                ))
        ;
    }

    
/**
     * @param OptionsResolverInterface $resolver
     */
    
public function setDefaultOptions(OptionsResolverInterface $resolver) {
        
$resolver->setDefaults(array(
            
'data_class' => 'JHONATHAN\SicondcBundle\Entity\Dictado'
        
));
    }

    
/**
     * @return string
     */
    
public function getName() {
        return 
'jhonathan_sicondcbundle_dictado';
    } 
y mi controlador es el siguiente:´
Código PHP:
public function escogertemasAction($id) { //$id es el id que estoy obteniendo del capitulo
 
$em $this->getDoctrine()->getManager();
        
$dictado = new Dictado($id); //Envio el IdCapitulo a la clase Dictado por el constructor
$form $this->createForm(new DictadoType(), $dictado); //creo el form

y no se que esta mal, según lo investigado debería funcionar y me sale este error:
Notice: Undefined property: JHONATHAN\SicondcBundle\Form\DictadoType::$capitul oId in C:\xampp\htdocs\SICONDC\src\JHONATHAN\SicondcBundl e\Form\DictadoType.php line 18

la linea 18 es la siguiente
$capituloId = $this->capituloId;

por favor ayudenme estoy 3 dias y no he podido resolverlo!!
  #7 (permalink)  
Antiguo 04/06/2015, 11:49
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: Clase Type: enviar un parametro

Debes de pasar el id o la entidad al constructor pero de DictadoType, no al de la clase Dictado
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 04/06/2015, 13:57
 
Fecha de Ingreso: mayo-2015
Mensajes: 50
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Clase Type: enviar un parametro

Muchísimas gracias amigo me funciono.. soys una maquina dios te bendiga y a los panas que me ayudaron!!

Etiquetas: clase, parametro, 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 13:34.