src/CMSBundle/Controller/FrontEnd/BlogController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\CMSBundle\Controller\FrontEnd;
  3. use App\BaseBundle\Controller\AbstractController;
  4. use App\CMSBundle\Entity\Blog;
  5. use App\CMSBundle\Entity\BlogCategory;
  6. use App\CMSBundle\Entity\BlogTag;
  7. use App\CMSBundle\Repository\BlogRepository;
  8. use PN\SeoBundle\Repository\SeoPageRepository;
  9. use PN\SeoBundle\Service\SeoService;
  10. use PN\ServiceBundle\Lib\Paginator;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16. * Blog controller.
  17. *
  18. * @Route("blog")
  19. */
  20. class BlogController extends AbstractController
  21. {
  22. /**
  23. * Lists all Blog entities.
  24. *
  25. * @Route("/{page}",requirements={"page" = "\d+"}, name="fe_blog_index", methods={"GET"})
  26. * @Route("/category/{slug}/{page}",requirements={"page" = "\d+"}, name="fe_blog_category", methods={"GET"})
  27. * @Route("/tag/{slug}/{page}",requirements={"page" = "\d+"}, name="fe_blog_tag", methods={"GET"})
  28. */
  29. public function index(
  30. Request $request,
  31. BlogRepository $blogRepository,
  32. SeoPageRepository $seoPageRepository,
  33. SeoService $seoService,
  34. int $page = 1,
  35. ?string $slug = null
  36. ): Response
  37. {
  38. $seoPage = null;
  39. $search = new \stdClass;
  40. $search->ordr = ["column" => 1, "dir" => "DESC"];
  41. $search->deleted = 0;
  42. $search->publish = 1;
  43. $routeName = $request->get("_route");
  44. if ($routeName == "fe_blog_category") {
  45. if ($slug == null) {
  46. throw $this->createNotFoundException();
  47. }
  48. $category = $seoService->getSlug($request, $slug, new BlogCategory());
  49. if (!$category) {
  50. throw $this->createNotFoundException();
  51. }
  52. if ($category instanceof RedirectResponse) {
  53. return $category;
  54. }
  55. $search->category = $category->getId();
  56. $seoPage = $category;
  57. } elseif ($routeName == "fe_blog_tag") {
  58. if ($slug == null) {
  59. throw $this->createNotFoundException();
  60. }
  61. $tag = $seoService->getSlug($request, $slug, new BlogTag());
  62. if (!$tag) {
  63. throw $this->createNotFoundException();
  64. }
  65. if ($tag instanceof RedirectResponse) {
  66. return $tag;
  67. }
  68. $search->tag = $tag->getId();
  69. $seoPage = $tag;
  70. }
  71. if ($seoPage == null) {
  72. $seoPage = $seoPageRepository->findOneByType("blogs");
  73. }
  74. if ($request->query->has("content")) {
  75. $request->query->remove("content");
  76. $count = $blogRepository->filter($search, true);
  77. $paginator = new Paginator($count, $page, 8);
  78. $blogs = ($count > 0) ? $blogRepository->filter($search, false, $paginator->getLimitStart(),
  79. $paginator->getPageLimit()) : [];
  80. return $this->render("cms/frontEnd/blog/_content.html.twig", [
  81. 'blogs' => $blogs,
  82. 'paginator' => $paginator->getPagination(),
  83. ]);
  84. }
  85. return $this->render('cms/frontEnd/blog/index.html.twig', [
  86. 'seoPage' => $seoPage,
  87. ]);
  88. }
  89. /**
  90. * @Route("/{slug}", name="fe_blog_show", methods={"GET"})
  91. */
  92. public function show(
  93. Request $request,
  94. SeoService $seoService,
  95. BlogRepository $blogRepository,
  96. string $slug
  97. ): Response
  98. {
  99. $blog = $seoService->getSlug($request, $slug, new Blog());
  100. if ($blog instanceof RedirectResponse) {
  101. return $blog;
  102. }
  103. if (!$blog) {
  104. throw $this->createNotFoundException();
  105. }
  106. return $this->render('cms/frontEnd/blog/show.html.twig', [
  107. 'blog' => $blog,
  108. 'relatedBlogs' => $this->getRelatedBlogs($blog, $blogRepository),
  109. ]);
  110. }
  111. private function getRelatedBlogs(Blog $blog, BlogRepository $blogRepository)
  112. {
  113. $search = new \stdClass;
  114. $search->ordr = ["column" => 0, "dir" => "DESC"];
  115. $search->deleted = 0;
  116. $search->publish = 1;
  117. $search->notId = $blog->getId();
  118. return $blogRepository->filter($search, false, 0, 3);
  119. }
  120. }