Symfony2 array of forms?

后端 未结 4 930
孤城傲影
孤城傲影 2021-02-10 09:06

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:23

    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:23

    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)
  • 2021-02-10 09:26

    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:34

    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)
提交回复
热议问题