Symfony 4 - Как установить идентификатор объекта для маршрута в перенаправлении после отправки формы - PullRequest
0 голосов
/ 13 декабря 2018

Сборка приложения Symfony 4.1.В моем ProfileController ...

У меня есть метод booking_new с формой для создания нового бронирования:

/**
 * @Route("/profile/booking/new", name="profile_booking_new")
 */
public function booking_new(EntityManagerInterface $em, Request $request)
{

    $form = $this->createForm(BookingFormType::class);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        /** @var @var Booking $booking */
        $booking = $form->getData();
        $booking->setUser($this->getUser());

        $em->persist($booking);
        $em->flush();

        return $this->redirectToRoute('profile_booking_show');

    }

    return $this->render('profile/bookings/booking_new.html.twig',[
        'bookingForm' => $form->createView()
    ]);
}

Затем у меня есть метод booking_show для отображения отдельных страниц бронирования с маршрутом, установленным для бронирования.id:

/**
 * @Route("/profile/booking/{id}", name="profile_booking_show")
 */
public function booking_show(BookingRepository $bookingRepo, $id)
{
    /** @var Booking $booking */
    $booking = $bookingRepo->findOneBy(['id' => $id]);

    if (!$booking) {
        throw $this->createNotFoundException(sprintf('There is no booking for id "%s"', $id));
    }

    return $this->render('profile/bookings/booking_show.html.twig', [
        'booking' => $booking,
    ]);
}

После создания бронирования я хочу перенаправить пользователя в представление "Показать бронирование" с правильным идентификатором.

Запустить сервер и получить эту ошибку ...

ERROR: Some mandatory parameters are missing ("id") to generate a URL for route "profile_booking_show".

Я понимаю ошибку, но как ее исправить?Как установить идентификатор только что созданного бронирования, не запрашивая идентификатор?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Как только новая сущность будет сохранена и очищена, вы можете использовать ее следующим образом:

 $em->persist($booking);
 $em->flush();

 return $this->redirectToRoute('profile_booking_show', ['id' => $bookig->getId()]);
0 голосов
/ 13 декабря 2018

Как указано в документах , вы должны добавить массив параметров в качестве второго аргумента

return $this->redirectToRoute('profile_booking_show', ['id'=>$id]);

...