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.
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.