Dynamic Generation for Submitted Forms (Español)

133 views
Skip to first unread message

Héctor Mario Medina Cabanelas

unread,
Nov 26, 2015, 2:19:14 AM11/26/15
to symfony-es
Muy buenas

Llevo tiempo queriendo implementar un formulario con 2 selects Provincia-Ciudad. Lo que busco es lo típico, filtrar ciudades dependiendo de las provincias seleccionadas.

En la página oficial de symfony2 hay un cookbook para ello, en perfecto inglés. Lo malo es que..no lo explica muy bien, o lo explica obviando cosas. http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-underlying-data

My pregunta es la siguiente: 

// src/AppBundle/Form/Type/SportMeetupType.php
namespace AppBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
// ...

class SportMeetupType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('sport', 'entity', array(
                'class'       => 'AppBundle:Sport',
                'placeholder' => '',
            ))
        ;

        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) {
                $form = $event->getForm();

                // this would be your entity, i.e. SportMeetup
                $data = $event->getData();

                $sport = $data->getSport();
                $positions = null === $sport ? array() : $sport->getAvailablePositions();

                $form->add('position', 'entity', array(
                    'class'       => 'AppBundle:Position',
                    'placeholder' => '',
                    'choices'     => $positions,
                ));
            }
        );
    }

    // ...
}

Cuando pone $sport->getAvailablePositions(). Entiendo lo siguiente:

Es un método de la entidad Sport, y por tanto debe estar definido en la entity Sport... mi pregunta es... ¿Cómo la defino? Lo he hecho, pero me lanza errores.

 public function getCiudadesseleccionadas(\TuzonaBundle\Entity\Provincias $provinciaselec){
    
    $em = $this->getDoctrine()->getManager();
    $ciudades = $em->getRepository('TuzonaBundle:Ciudades')->findby(array('provincias' => $provinciaselec));
   
    return $ciudades;
    }

En mi caso es $provincia->getCiudadesseleccionadas() pero me da error, concretamente este:

Attempted to call an undefined method named "getCiudadesseleccionadas" of class "Doctrine\Common\Collections\ArrayCollection".


Entonces le añadí en el construct() lo siguiente:

        $this->getCiudadesseleccionadas() = new \Doctrine\Common\Collections\ArrayCollection();

Y entonces me lanza este error:

Compile Error: Can't use method return value in write context



    Alguna idea? Un abrazo. 

    Sebastian Thomson

    unread,
    Nov 26, 2015, 10:32:38 AM11/26/15
    to symfony-es
    Creo que la mejor forma de hacer un select dependientes es como lo enseñan en "SHOW ME THE CODE".


    Espero que te sirva.


    Manuel Aguirre

    unread,
    Nov 26, 2015, 10:35:02 AM11/26/15
    to symfo...@googlegroups.com
    Buenas, como aporte adicional, un post de mi autoría sobre formularios dinamicos en symfony:

    http://manuelj555.github.io/2015/04/26/formularios-dinamicos.html

    Saludos!

    --
    --
    Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
    Para publicar en este grupo, envía un email a symfo...@googlegroups.com
    Para darte de baja, envía un email a symfony-es+...@googlegroups.com
    El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

    ---
    Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
    Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
    Para acceder a más opciones, visita https://groups.google.com/d/optout.



    --

    Manuel Aguirre.


    manuel_j555 | Desarrollador de Software | Optime Consulting | twitter | github | Sitio web


    A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos de leer manuales.

    Reply all
    Reply to author
    Forward
    0 new messages