Здравствуйте, не так долго изучаю symfony и застрял на следующем моменте.
- создал сущность с полями для бд, контроллер и форму;
- в контроллере в методе который выводит список экземпляров этой сущности создаю форму для каждой сущности в цикле экземпляров;
- присваиваю созданную форму в свойство каждого экземпляра;
- передаю массив сущностей в шаблон, где в цикле выводится список с данными и формой для редактирования каждого экземпляра.
Так же поставил в контроллере условия которые срабатывают при отправке формы и сохраняют изменения:
if($form->isSubmitted() && $form->isValid()){...}
Но при отправке формы изменения сохраняются всегда только для самого первого экземпляра, даже если я менял данные у другого экземпляра. Если после отправки не возвращать в контроллере редирект (
return $this->redirectToRoute(...);) то данные измененные в любой форме применяются ко всем экземплярам.
Вопросы:
В чем моя ошибка?
Как правильно сделать вывод списка сущностей с формами редактирования для каждой?
Спасибо!
Код сущности:
// src/AppBundle/Entity/Account.php
namespace AppBundle\Entity;
class Account
{
//...
/**
* @var FormInterface
*/
private $form;
/**
* @var FormView
*/
private $formView;
//...
}
Код метода контроллера:
// src/AppBundle/Controller/AccountController.php
//...
/**
* @Route("/accounts/", name="account_list")
* @Template()
*/
public function indexAction(Request $request)
{
$accounts = $this
->getDoctrine()
->getRepository('AppBundle:Account')
->findActive();
foreach ($accounts as $key => $account){
$form = $this->createForm(AccountType::class, $account);
$form->add('submit', SubmitType::class);
$formView = $form->createView();
$form->handleRequest($request);
$account->setForm($form);
$account->setFormView($formView);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$this->addFlash('success', 'Saved');
$em = $this->getDoctrine()->getManager();
$em->persist($data);
$em->flush();
return $this->redirectToRoute('account_list');
}
}
return [
'accounts' => $accounts,
];
}
//...
Код шаблона:
// src/AppBundle/Resources/views/account/index.html.twig
//...
{% block body %}
<ul class="list-group">
{% for account in accounts %}
<li class="list-group-item flex-column align-items-start">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{{ account.login }}</h5>
<small>{{ account.id }}</small>
</div>
{{ form_row(account.formView) }}
</li>
{% endfor %}
</ul>
{% endblock %}
//...