<?php
namespace App\Controller;
use App\DTO\AppDTO;
use App\Service\Cache\Cache;
use App\Model\Articles as ModelArticles;
use App\Service\SEO\Articles as SEOArticles;
use Symfony\Component\HttpFoundation\Request;
use App\Service\Paginator as ServicePaginator;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ArticlesController extends AbstractASController
{
protected AppDTO $app;
//Models
protected ModelArticles $Articles;
public function __construct(ModelArticles $Articles, AppDTO $app, RequestStack $requestStack)
{
$this->requestStack = $requestStack;
$this->app = $app;
$this->Articles = $Articles;
}
#[Route(path: '/articles', name: 'articles_list_no_locale', defaults: ['_locale' => '%app.default_lang%'])]
#[Route(path: '/{_locale}/articles', name: 'articles_list', requirements: ['_locale' => '%app.langs%'])]
public function list(Request $request, SEOArticles $Seo): Response
{
$start = (int) $request->query->get('start');
$results = $this->getParameter('articles.results');
$articles = $this->Articles->getOnePage($start, $results);
if (count($articles) == 0) {
throw $this->createNotFoundException('No articles');
}
$response = $this->render('articles/list.html.twig', [
'page' => $Seo->getPageList(),
'articles' => $articles,
'paginator' => new ServicePaginator('articles_list', count($articles), $results, $start),
]);
$response = Cache::http($response, $this->getParameter('app.http_cache_time'));
return $response;
}
#[Route(path: '/articles/{intname}', name: 'articles_cont_no_locale', defaults: ['_locale' => '%app.default_lang%'])]
#[Route(path: '/{_locale}/articles/{intname}', name: 'articles_cont', requirements: ['_locale' => '%app.langs%'])]
public function cont(SEOArticles $Seo, string $intname): Response
{
$article = $this->Articles->getByName($intname);
if (!$article) {
throw $this->createNotFoundException('The article does not exist');
}
$relatedArticles = $this->Articles->getRelatedArticles($article);
$response = $this->render('articles/cont.html.twig', [
'page' => $Seo->getPageCont($article),
'article' => $article,
'articles' => $relatedArticles,
]);
$response = Cache::http($response, $this->getParameter('app.http_cache_time'));
return $response;
}
}