src/Controller/Content/App/BlogController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Content\App;
  3. use App\Entity\Content\Blog;
  4. use App\Repository\Content\BlogCommentRepository;
  5. use App\Repository\Content\BlogRepository;
  6. use HttpInvalidParamException;
  7. use Knp\Component\Pager\PaginatorInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration as Ctrl;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. /**
  14. * Class BlogController
  15. *
  16. * @package App\Controller\Content\App
  17. *
  18. * @Route("/{_locale}/blog", requirements={"_locale": "\w{2}"})
  19. */
  20. class BlogController extends AbstractController
  21. {
  22. /**
  23. * @Route("/index", name="mdl_public_blog_index")
  24. *
  25. * @Ctrl\Cache(expires="+2 days", public=true)
  26. */
  27. public function indexAction(
  28. Request $request,
  29. PaginatorInterface $paginator,
  30. BlogRepository $blogRepository
  31. ): Response {
  32. if ('/_fragment' === $request->getPathInfo()) {
  33. return $this->render('Content/Public/Blog/index.ajax.twig', [
  34. 'blog' => $blogRepository->findByLocale($request->getLocale()),
  35. ]);
  36. }
  37. return $this->render('Content/Public/Blog/index.html.twig', [
  38. 'blog' => $paginator->paginate(
  39. $blogRepository->createByLocaleQueryBuilder($request->getLocale()),
  40. (int) $request->get('page', 1),
  41. (int) $request->get('itemsPerPage', 6)
  42. ),
  43. ]);
  44. }
  45. /**
  46. * @Route("/by_type/{type}", name="mdl_public_blog_by_type")
  47. * @Route("/by_type/{type}/{maxResults}")
  48. *
  49. * @Ctrl\Cache(Etag="type", expires="+2 days", public=true)
  50. */
  51. public function byTypeAction(
  52. Request $request,
  53. string $type,
  54. PaginatorInterface $paginator,
  55. BlogRepository $blogRepository
  56. ): Response {
  57. if (!isset(Blog::TYPES[$type])) {
  58. throw new HttpInvalidParamException('Blog type invalid');
  59. }
  60. if ('/_fragment' === $request->getPathInfo()) {
  61. return $this->render('Content/Public/Blog/by_type.ajax.twig', array(
  62. 'posts' => $blogRepository
  63. ->findByType(
  64. Blog::TYPES[$type],
  65. $request->getLocale(),
  66. $request->get('maxResults', 15)
  67. )
  68. ->getQuery()
  69. ->getResult(),
  70. 'type' => $type,
  71. 'fragment' => true,
  72. 'types' => array_flip(Blog::TYPES),
  73. ));
  74. }
  75. return $this->render('Content/Public/Blog/by_type.html.twig', [
  76. 'posts' => $paginator->paginate(
  77. $blogRepository->createByTypeQueryBuilder(Blog::TYPES[$type], $request->getLocale()),
  78. (int) $request->get('page', 1),
  79. (int) $request->get('itemsPerPage', 10)
  80. ),
  81. 'type' => $type,
  82. 'types' => array_flip(Blog::TYPES),
  83. ]);
  84. }
  85. /**
  86. * @param Blog $post
  87. *
  88. * @Route("/{slug}", name="mdl_public_blog_view")
  89. *
  90. * @Ctrl\Cache(Etag="post.getId() ~ post.getUpdatedAt().getTimestamp()", expires="+2 days", lastModified="post.getUpdatedAt()", public=true)
  91. *
  92. * @Ctrl\ParamConverter("post", class="App\Entity\Content\Blog", options={
  93. * "mapping": {"slug": "slug", "_locale": "locale"},
  94. * "repository_method" = "findOneBySlug",
  95. * "map_method_signature" = true
  96. * })
  97. *
  98. * @return Response
  99. */
  100. public function viewAction(Blog $post): Response
  101. {
  102. return $this->render('Content/Public/Blog/post.html.twig', [
  103. 'post' => $post,
  104. ]);
  105. }
  106. /**
  107. * @Route("/{slug}/similar", name="mdl_public_blog_similar")
  108. *
  109. * @Ctrl\Cache(Etag="blog.getId() ~ blog.getUpdatedAt().getTimestamp()", expires="+2 days", lastModified="blog.getUpdatedAt()", public=true)
  110. *
  111. * @Ctrl\ParamConverter("blog", class="App\Entity\Content\Blog", options={
  112. * "mapping": {"slug": "slug", "_locale": "locale"},
  113. * "repository_method" = "findOneBySlug",
  114. * "map_method_signature" = true
  115. * })
  116. */
  117. public function similarAction(
  118. Request $request,
  119. PaginatorInterface $paginator,
  120. BlogRepository $blogRepository,
  121. Blog $blog
  122. ): Response {
  123. return $this->render('Content/Public/Blog/sidebar.html.twig', [
  124. 'blog' => $paginator->paginate(
  125. $blogRepository->createByCategoryQueryBuilder($request->getLocale(), $blog->getCategory()->getId()),
  126. (int) $request->get('page', 1),
  127. (int) $request->get('itemsPerPage', 3)
  128. ),
  129. ]);
  130. }
  131. /**
  132. * @Route("/{slug}/comments", name="mdl_public_blog_comments")
  133. *
  134. * @Ctrl\Cache(Etag="blog.getId() ~ blog.getUpdatedAt().getTimestamp()", expires="+2 days", lastModified="blog.getUpdatedAt()", public=true)
  135. *
  136. * @Ctrl\ParamConverter("blog", class="App\Entity\Content\Blog", options={
  137. * "mapping": {"slug": "slug", "_locale": "locale"},
  138. * "repository_method" = "findOneBySlug",
  139. * "map_method_signature" = true
  140. * })
  141. */
  142. public function viewCommentsAction(
  143. Blog $blog
  144. ): Response {
  145. return $this->render('Content/Public/Blog/comments.html.twig', [
  146. 'comments' => $blog->getComments(),
  147. ]);
  148. }
  149. }