问题
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