Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][Symfony] Formularz edycji, sprawdzamy czy podany id istnieje w bazie, Symfony wyrzuca błąd.
luis2luis
post 26.11.2022, 20:45:10
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował luis2luis 26.11.2022, 21:26:38
Go to the top of the page
+Quote Post
Salvation
post 26.11.2022, 21:50:19
Post #2





Grupa: Zarejestrowani
Postów: 344
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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 ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 17:33