app/Customize/Controller/NewsController.php line 63

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Customize\Controller;
  13. use Eccube\Controller\AbstractController;
  14. use Eccube\Entity\Layout;
  15. use Eccube\Repository\LayoutRepository;
  16. use Eccube\Repository\NewsRepository;
  17. use Knp\Component\Pager\PaginatorInterface;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class NewsController extends AbstractController
  23. {
  24.     /**
  25.      * @var NewsRepository
  26.      */
  27.     protected $newsRepository;
  28.     /**
  29.      * @var LayoutRepository
  30.      */
  31.     protected $layoutRepository;
  32.     /**
  33.      * NewsController constructor.
  34.      *
  35.      * @param NewsRepository $newsRepository
  36.      * @param LayoutRepository $layoutRepository
  37.      */
  38.     public function __construct(NewsRepository $newsRepositoryLayoutRepository $layoutRepository)
  39.     {
  40.         $this->newsRepository $newsRepository;
  41.         $this->layoutRepository $layoutRepository;
  42.     }
  43.     /**
  44.      * お知らせ一覧画面
  45.      *
  46.      * @Route("/news", name="news_list", methods={"GET"})
  47.      * @Route("/news/page/{pageno}", requirements={"pageno" = "\d+"}, name="news_list_page", methods={"GET"})
  48.      * @Template("News/index.twig")
  49.      *
  50.      * @param Request $request
  51.      * @param PaginatorInterface $paginator
  52.      * @param int $pageno
  53.      *
  54.      * @return array
  55.      */
  56.     public function index(Request $requestPaginatorInterface $paginator$pageno 1)
  57.     {
  58.         // Load default layout for underlayer pages (ID = 2)
  59.         $Layout $this->layoutRepository->get(Layout::DEFAULT_LAYOUT_UNDERLAYER_PAGE);
  60.         $qb $this->newsRepository->getQueryBuilderAll();
  61.         // 公開されているお知らせのみ取得
  62.         $qb->andWhere('n.visible = :visible')
  63.            ->setParameter('visible'true)
  64.            ->andWhere('n.publish_date <= :now')
  65.            ->setParameter('now', new \DateTime());
  66.         $pagination $paginator->paginate(
  67.             $qb,
  68.             $pageno,
  69.             10 // 1ページあたり10件
  70.         );
  71.         return [
  72.             'Layout' => $Layout,
  73.             'pagination' => $pagination,
  74.         ];
  75.     }
  76.     /**
  77.      * お知らせ詳細画面
  78.      *
  79.      * @Route("/news/{id}", name="news_detail", requirements={"id" = "\d+"}, methods={"GET"})
  80.      * @Template("News/detail.twig")
  81.      *
  82.      * @param Request $request
  83.      * @param int $id
  84.      *
  85.      * @return array
  86.      */
  87.     public function detail(Request $request$id)
  88.     {
  89.         // Load default layout for underlayer pages (ID = 2)
  90.         $Layout $this->layoutRepository->get(Layout::DEFAULT_LAYOUT_UNDERLAYER_PAGE);
  91.         $News $this->newsRepository->find($id);
  92.         if (!$News || !$News->isVisible()) {
  93.             throw new NotFoundHttpException();
  94.         }
  95.         // 公開日時をチェック
  96.         $now = new \DateTime();
  97.         if ($News->getPublishDate() > $now) {
  98.             throw new NotFoundHttpException();
  99.         }
  100.         return [
  101.             'Layout' => $Layout,
  102.             'News' => $News,
  103.         ];
  104.     }
  105. }