4

是否可以创建和呈现我所知道的关于集合的表单数组,但它们并不真正符合我的想法?

我想要的是这样的

控制器

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

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

枝条

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

4 回答 4

7

只需在数组中创建表单:

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

更新

正如 edlouth 所提到的,您可以创建单独命名的每个表单。我更新了我的代码。

于 2014-07-15T03:46:02.377 回答
0

在数组中创建表单,但给每个表单一个唯一的名称。我已将其更改为可能不适合您的 formbuilder,但希望类似的东西会起作用。我也不确定是否放入new SomeType而不是“表单”,请参阅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));
于 2014-07-15T13:30:32.753 回答
0

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]);
于 2017-06-15T15:15:09.173 回答
0

那个行动 :

$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()
        // ...
    }
}

还有一种更好的渲染方式:

return $this->render('some_view.html.twig', [
    'forms' => array_map(function ($form) {
        return $form->createView();
    }, $forms),
]);
于 2018-11-05T13:53:20.817 回答