Изучаю Symfony-3. Сгенерировал сущности, создал формы, сгенерировал CRUD... Для примеры была взята таблица
vendor, состоящая из 3-х простых полей: id, title, email.
Стандартный код из CRUD-генератора, который мне не до конца ясен:
/**
* Displays a form to edit an existing vendor entity.
*
* @Route("/{id}/edit", name="vendor_edit")
* @Method({"GET", "POST"})
*/
public function editAction(Request $request, Vendor $vendor)
{
$deleteForm = $this->createDeleteForm($vendor);
$editForm = $this->createForm('AppBundle\Form\VendorType', $vendor);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('vendor_edit', array('id' => $vendor->getId()));
}
return $this->render('vendor/edit.html.twig', array(
'vendor' => $vendor,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
мне не совсем понятны два момента:
public function editAction(Request $request, Vendor $vendor)
Здесь помимо запроса, мы так же передаём объект
Vendor. Не совсем понимаю эту логику. Если бы у нас передавалось две формы сразу, например
Vendor и
User, появился бы так же объект
User и он бы автоматически присвоился переменной $user? Обычно, нужные данные я вытаскивал непосредственно из переменной
$request и присваивал их "руками", куда мне нужно (хотя, такой вариант мне тоже безусловно нравится).
Второй не ясный для меня момент:
if ($editForm->isSubmitted() && $editForm->isValid()) {
$this->getDoctrine()->getManager()->flush();
Здесь в первой строке идёт проверка на то, что форма заполнена, а дальше происходит какая-то магия не ясная мне. У нас нет никаких переменных, но делаем сброс буфера. Откуда Doctrine знает, что именно и куда нужно записать? Я не нашел нигде в коде контроллера какого либо звена связующего вторую строку кода с каким либо объектом.
Поясните пожалуйста, как всё это работает или если не сложно - ткните в документацию, где бы можно было про это прочитать. Спасибо!