You do not need to separate the entity, but your form: create 3 forms, each of which contains the property necessary for the ad object.
You will need:
- save (not clean) the $ ad object at every step inside your controller.
- pass the $ ad object as an argument when transferring inside your controller
- run the $ ad object in the last step
In pseudo code, your controller will look like this:
public function newAdStep1() { new Ad() // New instance of $ad new formStep1($ad) // The first form containing only the ad text field // The form was filled, manage it... form->isValid()? { persist($ad); // Persist the first part of your ad object forward(newAdStep2, $ad) // Go on to step 2, your $ad object as an argument } // ... or display step1 to user createView createAdStep1.html.twig('form' => $form); } public function newAdStep2($ad) { new formStep2($ad); // Now the second form, containing the "contact" fields isValid ? { persist($ad) forward(newAdStep3, $ad) } createView createAdStep2($form, $ad); // Your $ad object needs to be sent to the view } public function newAdStep3($ad) { new formStep3($ad); // Third and last form, containing the (X,Y) fields isValid ? { $em->persist($ad); $em->flush(); // Your instance of $ad can be stored in database now return('success !'); } return view createAdStep3($form, $ad); }
source share