busigbil /
MVC2025
| 1 | <?php |
||
| 2 | |||
| 3 | namespace App\Controller; |
||
| 4 | |||
| 5 | use App\Entity\Book; |
||
| 6 | use App\Repository\BookRepository; |
||
| 7 | use Doctrine\Persistence\ManagerRegistry; |
||
| 8 | use Exception; |
||
| 9 | use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||
| 10 | use Symfony\Component\HttpFoundation\JsonResponse; |
||
| 11 | use Symfony\Component\HttpFoundation\Request; |
||
| 12 | use Symfony\Component\HttpFoundation\Response; |
||
| 13 | use Symfony\Component\Routing\Attribute\Route; |
||
| 14 | |||
| 15 | final class LibraryController extends AbstractController |
||
| 16 | { |
||
| 17 | 1 | #[Route("/library", name: 'library')] |
|
| 18 | public function index(): Response |
||
| 19 | { |
||
| 20 | 1 | return $this->redirectToRoute('show_all'); |
|
| 21 | } |
||
| 22 | |||
| 23 | 1 | #[Route("/library/create", name: "add_book_get", methods: ['GET'])] |
|
| 24 | public function addBook(): Response |
||
| 25 | { |
||
| 26 | 1 | return $this->render('library/create.html.twig'); |
|
| 27 | } |
||
| 28 | |||
| 29 | 1 | #[Route("/library/create", name: "add_book_post", methods: ['POST'])] |
|
| 30 | public function addBookCallback( |
||
| 31 | Request $request, |
||
| 32 | ManagerRegistry $doctrine |
||
| 33 | ): Response { |
||
| 34 | 1 | $entityManager = $doctrine->getManager(); |
|
| 35 | |||
| 36 | 1 | $book = new Book(); |
|
| 37 | 1 | $book->setTitle((string) $request->request->get('title')); |
|
| 38 | 1 | $book->setIsbn((string) $request->request->get('isbn')); |
|
| 39 | 1 | $book->setAuthor((string) $request->request->get('author')); |
|
| 40 | 1 | $book->setImage((string) $request->request->get('image')); |
|
| 41 | |||
| 42 | 1 | $entityManager->persist($book); |
|
| 43 | |||
| 44 | 1 | $entityManager->flush(); |
|
| 45 | |||
| 46 | 1 | return $this->redirectToRoute('show_all'); |
|
| 47 | } |
||
| 48 | |||
| 49 | 1 | #[Route("/library/show/{id}", name: "show_one", methods: ['GET'])] |
|
| 50 | public function showBookById( |
||
| 51 | BookRepository $bookRepository, |
||
| 52 | int $id |
||
| 53 | ): Response { |
||
| 54 | 1 | $book = $bookRepository->find($id); |
|
| 55 | |||
| 56 | 1 | if (!$book) { |
|
| 57 | throw new Exception("No book found for id"); |
||
| 58 | } |
||
| 59 | |||
| 60 | 1 | return $this->render( |
|
| 61 | 1 | 'library/display_one.html.twig', |
|
| 62 | 1 | array('book' => $book) |
|
| 63 | 1 | ); |
|
| 64 | } |
||
| 65 | |||
| 66 | 1 | #[Route("/library/show", name: "show_all", methods: ['GET'])] |
|
| 67 | public function showAllBooks( |
||
| 68 | BookRepository $bookRepository |
||
| 69 | ): Response { |
||
| 70 | 1 | $books = $bookRepository->findAll(); |
|
| 71 | |||
| 72 | 1 | return $this->render( |
|
| 73 | 1 | 'library/display_all.html.twig', |
|
| 74 | 1 | array('books' => $books) |
|
| 75 | 1 | ); |
|
| 76 | } |
||
| 77 | |||
| 78 | 1 | #[Route("/library/update/{id}", name: "update_book_get", methods: ['GET'])] |
|
| 79 | public function updateBook( |
||
| 80 | BookRepository $bookRepository, |
||
| 81 | int $id |
||
| 82 | ): Response { |
||
| 83 | 1 | $book = $bookRepository->find($id); |
|
| 84 | |||
| 85 | 1 | if (!$book) { |
|
| 86 | throw new Exception("No book found for id"); |
||
| 87 | } |
||
| 88 | |||
| 89 | 1 | return $this->render( |
|
| 90 | 1 | 'library/update.html.twig', |
|
| 91 | 1 | array('book' => $book) |
|
| 92 | 1 | ); |
|
| 93 | } |
||
| 94 | |||
| 95 | 1 | #[Route("/library/update/{id}", name: "update_book_post", methods: ['POST'])] |
|
| 96 | public function updateBookCallback( |
||
| 97 | BookRepository $bookRepository, |
||
| 98 | Request $request, |
||
| 99 | ManagerRegistry $doctrine, |
||
| 100 | int $id |
||
| 101 | ): Response { |
||
| 102 | 1 | $entityManager = $doctrine->getManager(); |
|
| 103 | 1 | $book = $bookRepository->find($id); |
|
| 104 | |||
| 105 | 1 | if (!$book) { |
|
| 106 | throw new Exception("No book found for id"); |
||
| 107 | } |
||
| 108 | |||
| 109 | 1 | $book->setTitle((string) $request->request->get('title')); |
|
| 110 | 1 | $book->setIsbn((string) $request->request->get('isbn')); |
|
| 111 | 1 | $book->setAuthor((string) $request->request->get('author')); |
|
| 112 | 1 | $book->setImage((string) $request->request->get('image')); |
|
| 113 | |||
| 114 | 1 | $entityManager->flush(); |
|
| 115 | |||
| 116 | 1 | return $this->redirectToRoute('show_all'); |
|
| 117 | } |
||
| 118 | |||
| 119 | 1 | #[Route("/library/delete/{id}", name: "delete_book", methods: ['GET', 'POST'])] |
|
| 120 | public function deleteBook( |
||
| 121 | BookRepository $bookRepository, |
||
| 122 | ManagerRegistry $doctrine, |
||
| 123 | int $id |
||
| 124 | ): Response { |
||
| 125 | 1 | $entityManager = $doctrine->getManager(); |
|
| 126 | 1 | $book = $bookRepository->find($id); |
|
| 127 | |||
| 128 | 1 | if (!$book) { |
|
| 129 | throw new Exception("No book found for id"); |
||
| 130 | } |
||
| 131 | |||
| 132 | 1 | $title = $book->getTitle(); |
|
| 133 | |||
| 134 | 1 | $entityManager->remove($book); |
|
| 135 | 1 | $entityManager->flush(); |
|
| 136 | |||
| 137 | 1 | $this->addFlash( |
|
| 138 | 1 | 'notice', |
|
| 139 | 1 | $title . ' har tagits bort' |
|
| 140 | 1 | ); |
|
| 141 | |||
| 142 | 1 | return $this->redirectToRoute('show_all'); |
|
| 143 | } |
||
| 144 | |||
| 145 | 1 | #[Route("/api/library/books", name: 'json-books', methods: ['GET'], defaults: ['description' => 'Returnerar en JSON-struktur med samtliga böcker i biblioteket.'])] |
|
| 146 | public function jsonBooks( |
||
| 147 | BookRepository $bookRepository |
||
| 148 | ): Response { |
||
| 149 | 1 | $books = $bookRepository->findAll(); |
|
| 150 | |||
| 151 | 1 | if (empty($books)) { |
|
| 152 | throw $this->createNotFoundException( |
||
| 153 | 'No books found' |
||
| 154 | ); |
||
| 155 | } |
||
| 156 | |||
| 157 | 1 | $response = $this->json($books); |
|
| 158 | 1 | $response->setEncodingOptions( |
|
| 159 | 1 | $response->getEncodingOptions() | JSON_PRETTY_PRINT |
|
| 160 | 1 | ); |
|
| 161 | 1 | return $response; |
|
| 162 | } |
||
| 163 | |||
| 164 | 1 | #[Route("/api/library/book/{isbn<\d+>}", name: 'json-isbn', methods: ['GET'], defaults: ['description' => 'Returnerar en JSON-struktur för valt ISBN-nummer.', 'isbn' => '9789129691771'])] |
|
| 165 | public function jsonIsbn( |
||
| 166 | BookRepository $bookRepository, |
||
| 167 | ManagerRegistry $doctrine, |
||
|
0 ignored issues
–
show
|
|||
| 168 | string $isbn |
||
| 169 | ): Response { |
||
| 170 | 1 | $book = $bookRepository->findOneBy(['isbn' => $isbn]); |
|
| 171 | |||
| 172 | 1 | if (!$book) { |
|
| 173 | throw $this->createNotFoundException( |
||
| 174 | 'No book found for ISBN: '.$isbn |
||
| 175 | ); |
||
| 176 | } |
||
| 177 | |||
| 178 | 1 | $response = $this->json($book); |
|
| 179 | 1 | $response->setEncodingOptions( |
|
| 180 | 1 | $response->getEncodingOptions() | JSON_PRETTY_PRINT |
|
| 181 | 1 | ); |
|
| 182 | 1 | return $response; |
|
| 183 | } |
||
| 184 | } |
||
| 185 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.