src/Controller/BlogController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DataMapper\Blog\BlogPostShowDataMapper;
  4. use App\DataMapper\Blog\BlogPostCategoryDataMapper;
  5. use App\DataMapper\Blog\BlogPostListingDataMapper;
  6. use App\DataMapper\Pagination\PaginatorDataMapper;
  7. use App\Repository\BlogPostCategoryRepository;
  8. use App\Repository\BlogPostRepository;
  9. use Knp\Component\Pager\PaginatorInterface;
  10. use Pimcore\Controller\FrontendController;
  11. use Pimcore\Model\DataObject\BlogPost;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class BlogController extends FrontendController
  17. {
  18.     public function __construct(
  19.         private BlogPostRepository $blogPostRepository,
  20.         private BlogPostCategoryRepository $blogPostCategoryRepository,
  21. )
  22. {
  23. }
  24.     /**
  25.     * @Template
  26.     * @param Request $request
  27.     * @return array
  28.     */
  29. public function indexAction(Request $requestPaginatorInterface $paginator)
  30. {
  31.     $paginator $this->blogPostRepository->paginate($request$paginator);
  32.     $blogPostCategories $this->blogPostCategoryRepository->all();
  33.     return [
  34.         'paginator' => (new PaginatorDataMapper($paginator))->toArray($request),
  35.         'blog_posts' => BlogPostListingDataMapper::list([...$paginator->getItems()])->all($request),
  36.         'blog_post_categories' => BlogPostCategoryDataMapper::list($blogPostCategories)->all($request)
  37.     ];
  38. }
  39.     /**
  40.     * @Route ("/blog/{slug}-{blogPostId}", name="blog_post_show", requirements={"slug"="[\w-]+", "blogPostId"="\d+"})
  41.     * @param Request $request
  42.     * @param int $blogPostId
  43.     * @return Response
  44.     * @throws \Exception
  45.     */
  46.     public function showAction(
  47.         Request $request,
  48.         int $blogPostId
  49.     )
  50.     {
  51.     $blogPost $this->blogPostRepository->find($blogPostId);
  52.      if (empty($blogPost)) {
  53.             throw new \Exception('No blog post found');
  54.     }
  55.         return $this->render('blog/show.html.twig',
  56.            [
  57.                            'blog_post' => (new BlogPostShowDataMapper($blogPost))->toArray($request)
  58.            ]
  59.         );
  60.     }
  61.     
  62. }