src/Eccube/Controller/NewsController.php line 85

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 Eccube\Controller;
  13. use Eccube\Repository\NewsRepository;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class NewsController extends AbstractController
  20. {
  21.     /**
  22.      * @var NewsRepository
  23.      */
  24.     protected $newsRepository;
  25.     /**
  26.      * NewsController constructor.
  27.      *
  28.      * @param NewsRepository $newsRepository
  29.      */
  30.     public function __construct(NewsRepository $newsRepository)
  31.     {
  32.         $this->newsRepository $newsRepository;
  33.     }
  34.     /**
  35.      * お知らせ一覧画面.
  36.      *
  37.      * @Route("/news", name="news_list", methods={"GET"})
  38.      * @Template("News/list.twig")
  39.      */
  40.     public function index(Request $requestPaginatorInterface $paginator)
  41.     {
  42.         // handleRequestは空のqueryの場合は無視するため
  43.         if ($request->getMethod() === 'GET') {
  44.             $request->query->set('pageno'$request->query->get('pageno'''));
  45.         }
  46.         $qb $this->newsRepository->getQueryBuilderAll();
  47.         // 公開されているNewsのみをフィルター
  48.         $qb->where('n.visible = :visible')
  49.            ->setParameter('visible'true);
  50.         // 公開日時前のNewsをフィルター
  51.         $now = new \DateTime();
  52.         $qb->andWhere('(n.publish_date IS NULL OR n.publish_date <= :now)')
  53.            ->setParameter('now'$now);
  54.         // ページ番号を取得し、1以上であることを保証
  55.         $pageno $request->query->get('pageno');
  56.         $pageno = !empty($pageno) && is_numeric($pageno) && (int)$pageno ? (int)$pageno 1;
  57.         $pagination $paginator->paginate(
  58.             $qb->getQuery(),
  59.             $pageno,
  60.             10 // 1ページあたりの表示件数
  61.         );
  62.         return [
  63.             'pagination' => $pagination,
  64.         ];
  65.     }
  66.     /**
  67.      * お知らせ詳細画面.
  68.      *
  69.      * @Route("/news/{id}", name="news_detail", requirements={"id" = "\d+"}, methods={"GET"})
  70.      * @Template("News/detail.twig")
  71.      */
  72.     public function detail(Request $request$id)
  73.     {
  74.         $News $this->newsRepository->find($id);
  75.         if (!$News || !$News->isVisible()) {
  76.             throw new NotFoundHttpException();
  77.         }
  78.         // 公開日時前のNewsは表示しない
  79.         $now = new \DateTime();
  80.         if ($News->getPublishDate() && $News->getPublishDate() > $now) {
  81.             throw new NotFoundHttpException();
  82.         }
  83.         return [
  84.             'News' => $News,
  85.         ];
  86.     }
  87. }