query->get('query') ?? null; $term = trim($term); if (null !== $term) { if (ImdbMatcher::isMatch($term)) { $tmdbResult = $tmdb->search($term); $results = [ [ 'data' => $tmdbResult, 'text' => $tmdbResult->title, 'value' => "$tmdbResult->mediaType|$tmdbResult->imdbId", ] ]; } else { $tmdbResults = $tmdb->search($term); foreach ($tmdbResults as $tmdbResult) { /** @var TmdbResult $tmdbResult */ $results[] = [ 'data' => $tmdbResult, 'text' => $tmdbResult->title, 'value' => "$tmdbResult->mediaType|$tmdbResult->imdbId", ]; } } } return $this->json([ 'results' => $results, ]); } #[Route('/api/tmdb/watch-providers/{mediaType}/{tmdbId}', name: 'api.tmdb.watch_providers', methods: ['GET'])] public function watchProviders(string $mediaType, string $tmdbId, Request $request, TmdbClient $tmdb) { $result = $tmdb->watchProviders($tmdbId, $mediaType); if ($request->headers->get('Turbo-Frame')) { return $this->sendFragmentResponse(['providers' => $result], $request); } return $this->json($result); } #[Route('/api/tmdb/genre/{mediaType}/{genreId}', name: 'api.tmdb.genre', methods: ['GET'])] public function genreResults(string $mediaType, string $genreId, Request $request, TmdbClient $tmdb) { $genre = TmdbMovieGenre::from($genreId); $results['media_type'] = $mediaType; $results['genre'] = $genre->name; $results['genre_id'] = $genre->value; $results['media'] = match($mediaType) { MediaType::Movie->value => $tmdb->discoverMovies( [TmdbMovieGenre::from($genre->value)], ), MediaType::TvShow->value => $tmdb->discoverTvShows( [TmdbTvShowGenre::from($genreId)] ) }; if ($request->headers->get('Turbo-Frame')) { return $this->sendFragmentResponse(['result' => $results], $request); } return $this->json($results); } private function sendFragmentResponse(mixed $result, Request $request): Response { $request->setRequestFormat(TurboBundle::STREAM_FORMAT); return $this->renderBlock( 'discover/fragments.html.twig', $request->query->get('block'), [ 'result' => $result, 'target' => $request->query->get('target') ] ); } }