Symfony2 array of forms?

后端 未结 4 1621
庸人自扰
庸人自扰 2021-02-10 08:59

Is it possible to create and render and array of forms I know about collections but they don\'t really fit in my idea?

What I want is something like this

Contro

相关标签:
4条回答
  • 2021-02-10 09:19

    Just create your forms in array:

    $data = $em->findAll();
    for ($i = 0; $i < $n; $i++) {
        $forms[] = $this->container
            ->get('form.factory')
            ->createNamedBuilder('form_'.$i, new SomeType, $data)
            ->getForm()
            ->createView();
    }
    
    return $this->render(someView, array("forms" => $forms));
    

    UPDATED

    As mentioned by edlouth you can create each form named separately. I updated my code.

    0 讨论(0)
  • 2021-02-10 09:20

    Create the forms in an array, but give each one a unique name. I've changed it to formbuilder which might not be ideal for you but hopefully something similar will work. I'm also not certain about putting in new SomeType rather than 'form', see http://api.symfony.com/2.4/Symfony/Component/Form/FormFactory.html#method_createNamedBuilder.

    $data = $em->findAll();
    for ($i = 0; $i < $n; $i++) {
    
        $forms[] = $this->container
            ->get('form.factory')
            ->createNamedBuilder('form_'.$i, new SomeType, $data)
            ->getForm()
            ->createView();
    }
    
    return $this->render(someView, array("forms" => $forms));
    
    0 讨论(0)
  • 2021-02-10 09:29

    The action :

    $forms = [];
    
    foreach ($articles as $article) {
        $forms[$article->getId()] = $this->get('form.factory')->createNamed(
            'article_'.$article->getId(), // unique form name
            ArticleType::class,
            $article
        );
        $forms[$article->getId()]->handleRequest($request);
    
        if ($forms[$article->getId()]->isValid()) {
            // do what you want with $forms[$article->getId()]->getData()
            // ...
        }
    }
    

    And a better way to render :

    return $this->render('some_view.html.twig', [
        'forms' => array_map(function ($form) {
            return $form->createView();
        }, $forms),
    ]);
    
    0 讨论(0)
  • 2021-02-10 09:30

    Symfony3:

    $datas = $em->findAll();
    
    foreach ($datas as $key=>$data)
    {
       $form_name = "form_".$key;
       $form = $this->get('form.factory')->createNamed( 
          $form_name, 
          SomeType::class, 
          $data
       );
       $views[] = $form->createView();
    }
    return $this->render(someView, ["forms" => $views]);
    
    0 讨论(0)
提交回复
热议问题