100, // fetch more to allow deduplication 'sort' => [ ['createdAt' => ['order' => 'desc']] ] ]; $results = $finder->find($query); $unique = []; $articles = []; foreach ($results as $article) { $slug = $article->getSlug(); if (!isset($unique[$slug])) { $unique[$slug] = true; $articles[] = $article; if (count($articles) >= 50) break; } } // Fetch main index and extract nested indexes $mainIndex = $redisCacheService->getMagazineIndex('magazine-newsroom-magazine-by-newsroom'); $indexes = []; if ($mainIndex && $mainIndex->getTags() !== null) { foreach ($mainIndex->getTags() as $tag) { if ($tag[0] === 'a' && isset($tag[1])) { $parts = explode(':', $tag[1], 3); $indexes[$tag[1]] = end($parts); // Extract index key from tag } } } return $this->render('admin/articles.html.twig', [ 'articles' => $articles, 'indexes' => $indexes, ]); } #[Route('/admin/articles/add-to-index', name: 'admin_article_add_to_index', methods: ['POST'])] public function addToIndex( Request $request, RedisCacheService $redisCacheService ): RedirectResponse { $slug = $request->request->get('slug'); $indexKey = $request->request->get('index_key'); if (!$slug || !$indexKey) { $this->addFlash('danger', 'Missing article or index selection.'); return $this->redirectToRoute('admin_articles'); } // Build the tag: ['a', 'article:'.$slug] $articleTag = ['a', 'article:' . $slug]; $success = $redisCacheService->addArticleToIndex($indexKey, $articleTag); if ($success) { $this->addFlash('success', 'Article added to index.'); } else { $this->addFlash('danger', 'Failed to add article to index.'); } return $this->redirectToRoute('admin_articles'); } }