From f715f401e14cb2b5832a4fdf21d09c6a30eb0ab9 Mon Sep 17 00:00:00 2001 From: krzysiej Date: Mon, 6 Jun 2022 14:27:02 +0200 Subject: [PATCH] Moving api requests to another controller. --- assets/js/pages/book.vue | 4 ++-- config/services.yaml | 1 + src/Controller/BookController.php | 27 ++++++----------------- src/Controller/OnlineSourceController.php | 25 +++++++++++++++++++++ src/Form/SearchType.php | 3 +-- 5 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 src/Controller/OnlineSourceController.php diff --git a/assets/js/pages/book.vue b/assets/js/pages/book.vue index 45f3ba8..6671890 100644 --- a/assets/js/pages/book.vue +++ b/assets/js/pages/book.vue @@ -53,13 +53,13 @@ export default { }, methods: { search: function () { - axios.get('/book/search/' + this.searchTerm).then(response => { + axios.get('/online/search/' + this.searchTerm).then(response => { this.books = response.data; }); }, getBookDetails: function (url) { this.manualMode = true; - axios.get('/book/info/' + btoa(url)).then(response => { + axios.get('/online/info/' + btoa(url)).then(response => { const book = this.selectedBook = response.data; this.$el.querySelector('#book_title').value = book.title; this.$el.querySelector('#book_author').value = book.author; diff --git a/config/services.yaml b/config/services.yaml index 9d2e30e..a8fb70c 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -17,6 +17,7 @@ services: autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + Techtube\Bookinfo\BookFinder: # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name diff --git a/src/Controller/BookController.php b/src/Controller/BookController.php index 8568b10..3ff3457 100644 --- a/src/Controller/BookController.php +++ b/src/Controller/BookController.php @@ -8,7 +8,6 @@ use App\Form\BookType; use App\Form\FileType; use App\Form\SearchType; use App\Repository\BookRepository; -use App\Repository\FileRepository; use App\Service\FileService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\File\UploadedFile; @@ -17,7 +16,6 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; -use Techtube\Bookinfo\BookFinder; #[Route('/book')] class BookController extends AbstractController @@ -73,21 +71,19 @@ class BookController extends AbstractController ]); } - #[Route('/search/{phrase}', name: 'app_book_search', methods: ['GET'])] - public function search(string $phrase): JsonResponse - { - $bookFinder = new BookFinder(); - return new JsonResponse($bookFinder->search($phrase)); - } - - #[Route('/search/', name: 'app_book_search_book', methods: ['GET', 'POST'])] + #[Route('/search/', name: 'app_book_search', methods: ['GET', 'POST'])] public function searchBook(BookRepository $bookRepository, Request $request): Response { $searchForm = $this->createForm(SearchType::class); $searchForm->handleRequest($request); $books = []; + if ($searchForm->isSubmitted() && $searchForm->isValid()) { - $books = $bookRepository->findByTitle($searchForm->get('search')->getData()); + return $this->redirectToRoute('app_book_search', ['search' => ($searchForm->get('search')->getData())]); + } + + if ($request->query->has('search')) { + $books = $bookRepository->findByTitle($request->query->get('search')); } return $this->renderForm('book/search.html.twig', [ 'books' => $books, @@ -95,18 +91,10 @@ class BookController extends AbstractController ]); } - #[Route('/info/{urlInBase64}', name: 'app_book_info', methods: ['GET'])] - public function info(string $urlInBase64): JsonResponse - { - $bookFinder = new BookFinder(); - return new JsonResponse($bookFinder->byUrl(base64_decode($urlInBase64))); - } - #[Route('/{id}', name: 'app_book_show', methods: ['GET', 'POST'])] public function show( Book $book, Request $request, - FileRepository $fileRepository, FileService $fileService ): Response { $fileForm = $this->createForm(FileType::class); @@ -136,7 +124,6 @@ class BookController extends AbstractController Request $request, Book $book, BookRepository $bookRepository, - FileRepository $fileRepository, FileService $fileService ): Response { $form = $this->createForm(BookType::class, $book); diff --git a/src/Controller/OnlineSourceController.php b/src/Controller/OnlineSourceController.php new file mode 100644 index 0000000..2f16635 --- /dev/null +++ b/src/Controller/OnlineSourceController.php @@ -0,0 +1,25 @@ +search($phrase)); + } + + #[Route('/info/{urlInBase64}', name: 'app_online_info', methods: ['GET'])] + public function info(string $urlInBase64, BookFinder $bookFinder): JsonResponse + { + return new JsonResponse($bookFinder->byUrl(base64_decode($urlInBase64))); + } + +} diff --git a/src/Form/SearchType.php b/src/Form/SearchType.php index 95cdd09..67f4c05 100644 --- a/src/Form/SearchType.php +++ b/src/Form/SearchType.php @@ -20,7 +20,7 @@ class SearchType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $builder - ->setAction($this->router->generate('app_book_search_book')) + ->setAction($this->router->generate('app_book_search')) ->add('search', TextType::class, ['attr' => ['placeholder' => 'Book title']]) ; } @@ -28,7 +28,6 @@ class SearchType extends AbstractType public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ - // Configure your form options here 'attr' => ['class' => 'd-flex'] ]); }