how to split long symfony form in multiple pages?

后端 未结 3 1305
南旧
南旧 2020-12-15 09:47

I want to create a form for an entity which has a many attributes. To ensure the ease of data entry, I want to split that form in multiple pages (for example 2 or 3 pages).

3条回答
  •  清歌不尽
    2020-12-15 10:23

    You don't have to split your entity, but your form : create 3 forms, each containing the property needed from the ad entity.

    You'll need to :

    • persist (and not flush) the $ad object at every step inside your controller
    • pass the $ad object as an argument when forwarding inside your controller
    • flush the $ad object in the last step

    In pseudo-code, your controller would 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);
    }
    

提交回复
热议问题