Привет всем, у меня есть проблема с выбором 3 раскрывающихся списков ввода. У меня есть страна, в стране - штат, а в штате - город. Мне удалось выбрать отображение страны и состояния, но проблема в том, чтобы получить город из штата. Я получил эту ошибку. Идентификатор идентификатора отсутствует для запроса App \ Entity \ CountryState
Здесь находится мой конструктор форм
<?php
namespace 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,
]);
}
}
И на Twig у меня есть это 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();
}
});
});
Любое решение по этому поводу, пожалуйста, я пытаюсь погуглить, но решения не получаю. Кто угодно, пожалуйста.