src/Controller/Page/BlogPostsController.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Page;
  3. use App\Entity\Blog;
  4. use App\Entity\Category;
  5. use App\Entity\Employee;
  6. use App\Filter\BlogFilter;
  7. use App\Manager\BlogManager;
  8. use App\Renderer\Page as PageRenderer;
  9. use App\Service\BlogService;
  10. use Flagception\Bundle\FlagceptionBundle\Annotations\Feature;
  11. use FOS\HttpCacheBundle\Configuration\Tag;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Twig\Error\LoaderError;
  18. use Twig\Error\RuntimeError;
  19. use Twig\Error\SyntaxError;
  20. /**
  21.  * @Feature("feature_blog")
  22.  */
  23. #[Route(path'/blog_posts')]
  24. class BlogPostsController extends AbstractController
  25. {
  26.     private BlogFilter $filter;
  27.     private PageRenderer $pageRenderer;
  28.     private BlogService $service;
  29.     /**
  30.      * BlogPostsController constructor.
  31.      */
  32.     public function __construct(
  33.         BlogFilter $filter,
  34.         PageRenderer $pageRenderer,
  35.         BlogService $service
  36.     ) {
  37.         $this->filter $filter;
  38.         $this->pageRenderer $pageRenderer;
  39.         $this->service $service;
  40.     }
  41.     /**
  42.      * @Tag({"pages", "blog-overview", "blogs"})
  43.      *
  44.      * @throws LoaderError
  45.      * @throws RuntimeError
  46.      * @throws SyntaxError
  47.      * @throws \Throwable
  48.      */
  49.     public function indexAction(BlogManager $blogManagerParameterBagInterface $parameterBagstring $filters null): Response
  50.     {
  51.         $selectedFilters $blogManager->getSelectedFilters($filters);
  52.         $categories $blogManager->getCategories();
  53.         $selectedCategoryTitle $blogManager->getSelectedCategoryTitle($categories$selectedFilters);
  54.         return $this->pageRenderer
  55.             ->renderPage(
  56.                 '{blogs}',
  57.                 '@default/pages/blog_overview.html.twig',
  58.                 [
  59.                     'limitPerPage' => $parameterBag->get('site_blog_limit'),
  60.                     'categories' => $categories,
  61.                     'selectedFilters' => $selectedFilters,
  62.                     'selectedCategoryTitle' => $selectedCategoryTitle,
  63.                 ]
  64.             );
  65.     }
  66.     /**
  67.      * @Tag("blogs")
  68.      */
  69.     #[Route(path'/get'name'fetch_categorized_blogs')]
  70.     public function fetchCategorizedBlogs(Request $request): Response
  71.     {
  72.         $categories = [];
  73.         if ($request->query->get('categories')) {
  74.             foreach ($request->query->get('categories') as $category) {
  75.                 $category $this->getDoctrine()->getRepository(Category::class)->find($category);
  76.                 if (!$category) {
  77.                     continue;
  78.                 }
  79.                 $categories[] = $category->getSlug();
  80.             }
  81.         }
  82.         $limit $request->get('limit'4);
  83.         $blogs $this->filter->filterBlogPosts($this->getDoctrine()->getRepository(Blog::class)
  84.             ->findBy([], ['createdAt' => 'DESC'], $limit), $categories);
  85.         $blogFilteredVacancyQueries $this->service->getFilteredVacancyQueries($blogs);
  86.         return $this->render(
  87.             '@default/pages/categorized_blogs.html.twig',
  88.             compact('blogs''blogFilteredVacancyQueries')
  89.         );
  90.     }
  91.     /**
  92.      * @throws RuntimeError
  93.      * @throws SyntaxError
  94.      * @throws LoaderError
  95.      */
  96.     public function postsByEmployee(Employee $employeeParameterBagInterface $parameterBag): Response
  97.     {
  98.         return $this->pageRenderer
  99.             ->renderPage(
  100.                 '{blogs}',
  101.                 '@default/pages/blog_by_employee_overview.html.twig',
  102.                 [
  103.                     'employee' => $employee,
  104.                     'limitPerPage' => $parameterBag->get('site_blog_limit'),
  105.                     'categories' => [],
  106.                 ]
  107.             );
  108.     }
  109. }