Hello everyone i have a challenge on select 3 input dropdown.I have Country, in Country i have State and in State i have City.I have success to manage choose Country and state display but the issue is from State to get CityI got this error The identifier id is missing for a query of App\Entity\CountryState
My Form Builder is here
<?phpnamespace App\Form;use App\Entity\Country;use App\Entity\CountryState;use App\Entity\StateCities;use App\Entity\User;use App\Repository\CountryRepository;use App\Repository\CountryStateRepository;use App\Repository\StateCitiesRepository;use Doctrine\ORM\EntityRepository;use Symfony\Bridge\Doctrine\Form\Type\EntityType;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\Extension\Core\Type\ChoiceType;use Symfony\Component\Form\Extension\Core\Type\EmailType;use Symfony\Component\Form\Extension\Core\Type\PasswordType;use Symfony\Component\Form\Extension\Core\Type\RepeatedType;use Symfony\Component\Form\Extension\Core\Type\TextType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\Form\FormEvent;use Symfony\Component\Form\FormEvents;use Symfony\Component\Form\FormInterface;use Symfony\Component\OptionsResolver\OptionsResolver;use Symfony\Component\Validator\Constraints\Length;use Symfony\Component\Validator\Constraints\NotBlank;use Symfony\Component\Validator\Constraints\Regex;class CreateBusinessFormType extends AbstractType{private $countryRepository;private $countryStateRepository;private $stateCitiesRepository;public function __construct( CountryRepository $countryRepository, CountryStateRepository $countryStateRepository, StateCitiesRepository $stateCitiesRepository ) { $this->countryRepository = $countryRepository; $this->countryStateRepository = $countryStateRepository; $this->stateCitiesRepository = $stateCitiesRepository;}public function buildForm(FormBuilderInterface $builder, array $options){ $builder ->add('country', EntityType::class, ['label' => 'Country','placeholder' => 'Select Country','required' => true,'class' => Country::class,'query_builder' => function (EntityRepository $entityRepository) { return $entityRepository->createQueryBuilder('c') ->addOrderBy('c.name', 'ASC'); },'choice_label' => 'name','choice_value' => 'name','constraints' => [ new NotBlank(['message' => 'Country is required', ]), ], ]) ->add('state', ChoiceType::class, ['choices' => [], ]); $formModifyState = function (FormInterface $form, Country $country = null) { // Get States $states = (null === $country) ? [] : $country->getCountryStates(); // Add State Form $form->add('state', EntityType::class, ['class' => CountryState::class,'label' => 'State (Optional)','placeholder' => 'Select State','choices' => $states,'choice_label' => 'name','required' => false, ]); }; $formModifyCity = function (FormInterface $form, CountryState $countryState = null) { // Get City $cityOption = (null === $countryState) ? [] : $countryState->getStateCities(); //var_dump($city); // Add City Form $form->add('city', EntityType::class, ['class' => StateCities::class,'label' => 'City (Optional)','placeholder' => 'Select City','choices' => $cityOption,'choice_label' => 'name','required' => false,'constraints' => [ new NotBlank(['message' => 'State City is required', ]), ], ]); }; // Create Event Listener for State $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formModifyState) { // Get Data $data = $event->getData(); // Get Country $country = (null === $data) ? null : $this->countryRepository->find($data); $formModifyState($event->getForm(), $country); } ); // Create Event Listener for City $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formModifyCity) { // Get Data $data = $event->getData(); // Get State $state = $this->countryStateRepository->find($data); //$test = $this->countryStateRepository->find($data); //var_dump($data); $formModifyCity($event->getForm(), $state); } ); // Bulder Country $builder->get('country')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($formModifyState) { // Get Data $data = $event->getForm()->getData(); $formModifyState($event->getForm()->getParent(), $data); }); // Bulder State $builder->get('state')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($formModifyCity) { // Get Data $data = $event->getForm()->getData(); $formModifyCity($event->getForm()->getParent(), $data); });}public function configureOptions(OptionsResolver $resolver){ $resolver->setDefaults([ //'data_class' => User::class, ]);}}
And on Twig i have this Javascript
var $post_country = $('#create_business_form_country'); var $post_token = $('#create_business_form__token'); // Country on change $post_country.change(function() { $("#create_business_form_state").select2(); var $form = $(this).closest('form'); var data = {}; data[$post_token.attr('name')] = $post_token.val(); data[$post_country.attr('name')] = $post_country.val(); $('#create_business_form_state').prop('disabled', true); // Replace Old State form to New $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: data, success: function (html) { // Replace current states field ... $('#create_business_form_state').replaceWith( // ... with the returned one from the AJAX response. $(html).find('#create_business_form_state') ); // Enable Input $('#create_business_form_state').prop('disabled', false); // Update Select2 $('#create_business_form_state').select2(); } }); });
Any solution on this please, i try to google but no solution i get. Anyone please.