src/ProductBundle/Controller/FrontEnd/CategoryController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\ProductBundle\Controller\FrontEnd;
  3. use App\BaseBundle\Controller\AbstractController;
  4. use App\CMSBundle\Lib\Paginator;
  5. use App\ProductBundle\Entity\Category;
  6. use App\ProductBundle\Repository\CategoryRepository;
  7. use App\ProductBundle\Service\CategoryService;
  8. use PN\SeoBundle\Repository\SeoPageRepository;
  9. use PN\SeoBundle\Service\SeoService;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. /**
  14. * Blog controller.
  15. *
  16. * @Route("category")
  17. */
  18. class CategoryController extends AbstractController
  19. {
  20. /**
  21. * @Route("/{slug}/{page}", requirements={"page": "\d+"}, defaults={"slug": "null"}, name="fe_category_index", methods={"GET"})
  22. */
  23. public function index(
  24. Request $request,
  25. SeoService $seoService,
  26. SeoPageRepository $seoPageRepository,
  27. CategoryService $categoryService,
  28. CategoryRepository $categoryRepository,
  29. int $page = 1,
  30. string $slug = null
  31. ): Response
  32. {
  33. $search = new \stdClass;
  34. $search->deleted = 0;
  35. $search->publish = 1;
  36. $search->ordr = ["column" => 0, "dir" => "ASC"];
  37. $search->string = $request->get("q");
  38. $search->parent = "";
  39. $category = $seoPage = null;
  40. if ($slug !== null) {
  41. $seoPage = $category = $seoService->getSlug($request, $slug, new Category());
  42. if (!$category) {
  43. throw $this->createNotFoundException();
  44. }
  45. if ($category->getChildren()->count() < 1) {
  46. return $this->redirectToRoute("fe_product_filter_category", ["slug" => $category->getSeo()->getSlug()]);
  47. }
  48. $search->parent = $category->getId();
  49. }
  50. if ($request->query->has("content")) {
  51. $request->query->remove("content");
  52. $count = $categoryRepository->filter($search, true);
  53. $paginator = new Paginator($count, $page, 12);
  54. $categories = ($count > 0) ? $categoryRepository->filter($search, false, $paginator->getLimitStart(),
  55. $paginator->getPageLimit()) : [];
  56. return $this->render("product/frontEnd/category/_content.html.twig", [
  57. 'categories' => $categories,
  58. 'parentCategory' => $category,
  59. "paginator" => $paginator->getPagination(),
  60. ]);
  61. }
  62. $categoryParents = $categoryService->parentsByChild($category);
  63. if (!$category instanceof Category) {
  64. $seoPage = $seoPageRepository->findOneByType("categories");
  65. }
  66. return $this->render("product/frontEnd/category/index.html.twig", [
  67. 'search' => $search,
  68. 'seoPage' => $seoPage,
  69. 'parentCategory' => $category,
  70. 'categoryParents' => $categoryParents,
  71. ]);
  72. }
  73. }