Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][Symfony] Formularz edycji, sprawdzamy czy podany id istnieje w bazie
Forum PHP.pl > Forum > PHP
luis2luis
Witam.

Mam metode w kontrolerze, w której generuje formularz edycji.

Jeżeli jednak poda się w adresie id zadania, które nie istnieje, wtedy Symfony wqyrzuca, że taki obiekt nie istnieje, chcialbym wyświetliś z tej okazji addFlash()

np dla linku: https://127.0.0.1:8000/task/edit/19

  1. #[Route('/task/edit/{id}', name: 'app_task_edit')]
  2. public function edit(Task $task, Request $request, int $id): Response
  3. {
  4. //CHCE TUTAJ SPRAWDZIĆ CZY taki rekord/obiekt istnieje.
  5. $this->taskRepository->findOneBy(['id' => $id]);
  6. if (...) {
  7. $this->addFlash('success', 'Brak produktu o podanym ID');
  8. return $this->redirectToRoute('app_task_show_list');
  9. }
  10.  
  11. $form = $this->createForm(TaskType::class, $task);
  12.  
  13. $form->handleRequest($request);
  14. if ($form->isSubmitted() && $form->isValid()) {
  15.  
  16. $task = $form->getData();
  17.  
  18. $this->entityManager->persist($task);
  19. $this->entityManager->flush();
  20.  
  21. $this->taskRepository->countTasksInCategory();//update taskCount
  22.  
  23. $this->addFlash('success', 'Your form has been edit.');
  24.  
  25. return $this->redirectToRoute('app_task_show_list');
  26. }
  27.  
  28. return $this->renderForm('task/edit.html.twig', [
  29. 'form' => $form,
  30. 'id' => $id,
  31. ]);
  32. }
  33.  


Jak przy edycji sprawdzić, czy obiekt/rekord o tym id istnieje, niestety wyrzuca błąd php, że obiekt nie istnieje.

Wygląda jakby jakiś nadrzędny mechanizm sprawdzał przed wykonaniem tej metody. Czy trzeba użyć jakiegoś eventu?
Proszę o podpowiedź smile.gif
Salvation
Nie korzystasz z ParamConvertera tylko pobierasz Entity manualnie, więc w sumie nie widzę problemu z tym co chcesz zrobić...

`findOneBy` zwróci ci obiekt albo null (chociaż ręki nie dam sobie ręki uciąć), więc...
  1. $task = $this->taskRepository->findOneBy(['id' => $id]);
  2.  
  3. if ($task === null) {
  4. $this->addFlash('success', 'Brak produktu o podanym ID');
  5.  
  6. return $this->redirectToRoute('app_task_show_list');
  7. }

Jeżeli nie jest tak jak pisałem, to zawsze zostaje try / catch ;)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.