I have two dropdowns in my form . Options in second dropdown depend on selected value in the first dropdown. If validation fails I need to get posted value of the first dropdown to set options in the second dropdown. So how to receive posted value in the form type class when validation fails?
$form = $this->createForm(MyFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/**
* Do your stuff when form is valid
*/
} else {
/**
* Here you can get the input data even failed with $form->getData()
*/
dump($form->getData());
}
$form->getData()
gives me the values of input that didn't failed in the else:
array:4 [▼
"first_dropdown" => "hello"
]
$advert = new Advert();
$form = $this->createForm(AdvertType::class, $advert, ['method' => 'POST'])
->handleRequest($request);
if (false === $form->isSubmitted()) {
$form->submit([]);
}
if (false === $form->isValid()) {
return ['form' => $form];
}
$manager = $this->getDoctrine()->getManager();
$this->appendTags($advert);
$manager->persist($advert);
$manager->flush();
return $advert;
I needed something like below, in my form type class eg. DocType in buildForm() method I did:
$request = Request::createFromGlobals();
$myObjectId = $request->request->get('doc')['object']; // selected option of the first dropdown
$object = ($obectId) ? $objectRepository->find($objectId) : null;
Then I could use fetched object, to populate second dropdown, using query builder.