<?php
namespace App\Controller\Front;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use App\Repository\Blog\PostRepository;
use App\Repository\MediaRepository;
use App\Repository\Banner\BannerRepository;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use App\Entity\Blog\Post;
class BlogController extends AbstractController
{
/** @var BannerRepository */
private $bannerRepository;
/** @var PostRepository */
private $postRepository;
/** @var MediaRepository */
private $mediaRepository;
/** @var SessionInterface */
private $session;
/** @var string $theme */
private $theme;
/**
* @param BannerRepository $bannerRepository
* @param PostRepository $postRepository
* @param MediaRepository $mediaRepository
* @param Session $session
*/
public function __construct(BannerRepository $bannerRepository, PostRepository $postRepository, MediaRepository $mediaRepository, SessionInterface $session)
{
$this->bannerRepository = $bannerRepository;
$this->postRepository = $postRepository;
$this->mediaRepository = $mediaRepository;
$this->session = $session;
$this->theme = $this->session->get('theme', 'horse');
}
public function index(Request $request, PaginatorInterface $paginator): Response
{
$localeCode = $request->getLocale();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$query = $this->postRepository->findPostsQuery($localeCode);
$posts = $paginator->paginate($query, $request->query->getInt('page', 1), 5);
$recentPosts = $this->postRepository->recentPosts($localeCode, null, 5);
$medias = $paginator->paginate( $this->mediaRepository->findMedias(), 1, 6);
return $this->render('front/blog/index.html.twig', compact('posts', 'recentPosts', 'medias', 'banner'));
}
public function show(Request $request, $id, PaginatorInterface $paginator): Response
{
$localeCode = $request->getLocale();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$post = $this->postRepository->findPost($id, $localeCode);
$recentPosts = $this->postRepository->recentPosts($localeCode, null, 5);
$medias = $paginator->paginate( $this->mediaRepository->findMedias(), 1, 6);
return $this->render('front/blog/show.html.twig', compact('post', 'recentPosts', 'medias', 'banner'));
}
public function recent(Request $request): Response
{
$localeCode = $request->getLocale();
$recentPosts = $this->postRepository->recentPosts($localeCode, $this->theme);
return $this->render('front/blog/recent_blogs.html.twig', compact('recentPosts'));
}
public function footerBlogs(Request $request): Response
{
$localeCode = $request->getLocale();
$posts = $this->postRepository->recentPosts($localeCode, $this->theme, 2);
return $this->render('front/blog/footer_blogs.html.twig', compact('posts'));
}
}