Я пытаюсь понять, как работают контроллеры Symfoy CRUD, я много искал и не могу найти ответы.Контроллер Symfony CRUD - как он работает?
Итак, вопрос в том, как знает контроллер, какой объект передан в маршрут? Например:
На этом маршруте указателя мы вызываем диспетчер учений, а затем вытягиваем все комментарии из базы данных.
/**
* Lists all Comment entities.
*
* @Route("/", name="admin_comment_index")
* @Method("GET")
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$comments = $em->getRepository('AppBundle:Comment')->findAll();
return $this->render('comment/index.html.twig', array(
'comments' => $comments,
));
}
но на следующую «новую» акции мы не называем любую доктрину instances.Controller кажется знает, какой настройки уже объект работает.
/**
* Creates a new Comment entity.
*
* @Route("/new", name="admin_comment_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request)
{
$comment = new Comment();
$form = $this->createForm('AppBundle\Form\CommentType', $comment);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($comment);
$em->flush();
return $this->redirectToRoute('admin_comment_show', array('id' => $comment->getId()));
}
return $this->render('comment/new.html.twig', array(
'comment' => $comment,
'form' => $form->createView(),
));
}
Я предполагаю, что это потому, что второй маршрут получает объект «Запрос», является ли объект сохранен в нем? Я хотел бы получить более глубокое объяснение.
UPDATE: «новое» действие теперь мне кажется ясным, что это был плохой пример того, что я пытаюсь понять, но давайте посмотрим на «редактировать» действие:
public function editAction(Request $request, Comment $comment)
{
$deleteForm = $this->createDeleteForm($comment);
$editForm = $this->createForm('AppBundle\Form\CommentType', $comment);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($comment);
$em->flush();
return $this->redirectToRoute('admin_comment_edit', array('id' => $comment->getId()));
}
return $this->render('comment/edit.html.twig', array(
'comment' => $comment,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
На этот раз, форма уже оказана с данными в нем, но мы лишь вскользь «идентификатор» в запросе
<a href="{{ path('admin_comment_edit', { 'id': comment.id }) }}">edit</a>
откуда данные поступают на этот раз? Похоже, от комментариев объекта, который передается в контроллер, но я не вижу, где это пришли от. Извините за мои вопросы noobish и плохой английский!
Какой объект необходимо извлечь из базы данных в случае «нового»? – Eiko
@Eiko Да, это был плохой пример, как насчет «редактировать» fucntion? Pls смотрит на обновление в моем посте! –
в 'editAction' Symfony загружает объект из переданного id из-за [type-hinting] (http://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter) – Jeet