Browse Source

Latest, cached

imwald
Nuša Pukšič 3 months ago
parent
commit
4fd561667d
  1. 31
      src/Controller/DefaultController.php

31
src/Controller/DefaultController.php

@ -50,22 +50,31 @@ class DefaultController extends AbstractController
* @throws Exception * @throws Exception
*/ */
#[Route('/latest-articles', name: 'latest_articles')] #[Route('/latest-articles', name: 'latest_articles')]
public function latestArticles(FinderInterface $finder): Response public function latestArticles(FinderInterface $finder, CacheItemPoolInterface $articlesCache): Response
{ {
// Query all articles and sort by created_at descending $cacheKey = 'latest_articles_list';
$query = new Query(); $cacheItem = $articlesCache->getItem($cacheKey);
$query->setSize(50);
$query->setSort(['createdAt' => ['order' => 'desc']]); if (!$cacheItem->isHit()) {
// Query all articles and sort by created_at descending
$query = new Query();
$query->setSize(50);
$query->setSort(['createdAt' => ['order' => 'desc']]);
// Use collapse to deduplicate by slug field // Use collapse to deduplicate by slug field
$collapse = new Collapse(); $collapse = new Collapse();
$collapse->setFieldname('slug'); $collapse->setFieldname('slug');
$query->setCollapse($collapse); $query->setCollapse($collapse);
$articles = $finder->find($query); $articles = $finder->find($query);
$cacheItem->set($articles);
$cacheItem->expiresAfter(300); // Cache for 5 minutes
$articlesCache->save($cacheItem);
}
return $this->render('pages/latest-articles.html.twig', [ return $this->render('pages/latest-articles.html.twig', [
'articles' => $articles, 'articles' => $cacheItem->get(),
]); ]);
} }

Loading…
Cancel
Save