protected function configureFormFields(FormMapper $formMapper) { parent::configureFormFields($formMapper); $formMapper->tab('User')->with('General')->add('empresa', 'sonata_type_model_list', ['label' => 'Empresa', 'required' => true, 'btn_delete' => false], ['placeholder' => 'Seleccionar Empresa'])->add('organizacion')->end()->end(); $builder = $formMapper->getFormBuilder(); $factory = $builder->getFormFactory(); $refreshOrganizacion = function ($form, $empresa) use($factory) { $form->add($factory->createNamed('organizacion', 'entity', null, ['auto_initialize' => false, 'class' => 'AppBundle:Organizacion', 'mapped' => true, 'label' => 'Organización', 'placeholder' => 'Seleccione Organización', 'empty_data' => null, 'required' => false, 'query_builder' => function (EntityRepository $repository) use($empresa) { $qb = $repository->createQueryBuilder('organizacion'); if ($empresa instanceof Empresa) { $qb = $qb->where('organizacion.empresa = :empresa')->setParameter('empresa', $empresa); } elseif (is_numeric($empresa)) { $qb = $qb->where('organizacion.empresa = :empresa_id')->setParameter('empresa_id', $empresa); } else { $qb = $qb->where('0 = 1'); } return $qb; }])); }; // Populate ddl to show form $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($refreshOrganizacion, $factory) { $data = $event->getData(); $form = $event->getForm(); // Test if null because this event is called 2 times, only the second time with the actual Lesson object (which has null values in the creation case) if ($data !== null) { // In case of creation if ($data->getEmpresa() === null) { // Creates empty fields $refreshOrganizacion($form, null); } else { if ($data->getEmpresa() !== null) { $refreshOrganizacion($form, $data->getEmpresa()); } else { $refreshOrganizacion($form, null); } } } }); // Populate ddl when form was posted $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($refreshOrganizacion) { $form = $event->getForm(); $data = $event->getData(); if (array_key_exists('empresa', $data)) { $refreshOrganizacion($form, $data['empresa']); } }); // Select value in ddl when editing $builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use($refreshOrganizacion) { $data = $event->getData(); $form = $event->getForm(); if (null === $data || null === $data->getId()) { return; } if ($data->getOrganizacion() !== null) { $form->get('organizacion')->setData($data->getOrganizacion()); } }); }
protected function configureFormFields(FormMapper $formMapper) { parent::configureFormFields($formMapper); }