You need to use collections of forms, you can read about them in the documentation .
You can implement something like this:
- Create a container class for the Garden class collection:
// src / AppBundle / Entity / Gardens.php
namespace AppBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; class Gardens { protected $gardens; public function __construct() { $this->gardens = new ArrayCollection(); } public function getGardens() { return $this->gardens; } }
// src / AppBundle / Entity / Garden.php
namespace AppBundle\Entity; class Garden { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } }
- we create the form for Garden:
// src / AppBundle / Form / Type / GardenType.php
namespace AppBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class GardenType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name'); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AppBundle\Entity\Garden', )); } }
- we create the form for Gardens:
// src / AppBundle / Form / Type / GardensType.php
namespace AppBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\CollectionType; class GardensType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('gardens', CollectionType::class, array( 'entry_type' => GardenType::class )); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AppBundle\Entity\Gardens', )); } }
// src / AppBundle / Controller / GardensController.php
namespace AppBundle\Controller; use AppBundle\Entity\Gardens; use AppBundle\Entity\Garden; use AppBundle\Form\Type\GardensType; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class GardensController extends Controller { public function indexAction(Request $request) { $gardens = new Gardens(); $garden1 = new Garden(); $garden1->setName('garden1'); $gardens->getGardens()->add($garden1); $garden2 = new Garden(); $garden2->setName('garden2'); $gardens->getGardens()->add($garden2); $form = $this->createForm(GardensType::class, $gardens); $form->handleRequest($request); return $this->render('AppBundle:Gardens:index.html.twig', array( 'form' => $form->createView(), )); } }
{{form_start (form)}}
{% for garden in form.gardens%}
{{form_row (garden.name)}}
{% endfor%}
{{form_end (form)}}