Symfony2 array of forms?

心不动则不痛 提交于 2019-12-04 13:31:08

问题


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

Controller

$data=$em->findAll();
$Forms=$this->createForm(new SomeType,$data);

return $this->render(someView,array("Forms"=>$Forms->createView()));

Twig

  {% for Form in Forms %}
  {{ form(Form)}}
  {% endfor %}

回答1:


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.




回答2:


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));



回答3:


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]);



回答4:


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),
]);


来源:https://stackoverflow.com/questions/24748027/symfony2-array-of-forms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!