<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Customize\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Entity\Layout;
use Eccube\Repository\LayoutRepository;
use Eccube\Repository\NewsRepository;
use Knp\Component\Pager\PaginatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class NewsController extends AbstractController
{
/**
* @var NewsRepository
*/
protected $newsRepository;
/**
* @var LayoutRepository
*/
protected $layoutRepository;
/**
* NewsController constructor.
*
* @param NewsRepository $newsRepository
* @param LayoutRepository $layoutRepository
*/
public function __construct(NewsRepository $newsRepository, LayoutRepository $layoutRepository)
{
$this->newsRepository = $newsRepository;
$this->layoutRepository = $layoutRepository;
}
/**
* お知らせ一覧画面
*
* @Route("/news", name="news_list", methods={"GET"})
* @Route("/news/page/{pageno}", requirements={"pageno" = "\d+"}, name="news_list_page", methods={"GET"})
* @Template("News/index.twig")
*
* @param Request $request
* @param PaginatorInterface $paginator
* @param int $pageno
*
* @return array
*/
public function index(Request $request, PaginatorInterface $paginator, $pageno = 1)
{
// Load default layout for underlayer pages (ID = 2)
$Layout = $this->layoutRepository->get(Layout::DEFAULT_LAYOUT_UNDERLAYER_PAGE);
$qb = $this->newsRepository->getQueryBuilderAll();
// 公開されているお知らせのみ取得
$qb->andWhere('n.visible = :visible')
->setParameter('visible', true)
->andWhere('n.publish_date <= :now')
->setParameter('now', new \DateTime());
$pagination = $paginator->paginate(
$qb,
$pageno,
10 // 1ページあたり10件
);
return [
'Layout' => $Layout,
'pagination' => $pagination,
];
}
/**
* お知らせ詳細画面
*
* @Route("/news/{id}", name="news_detail", requirements={"id" = "\d+"}, methods={"GET"})
* @Template("News/detail.twig")
*
* @param Request $request
* @param int $id
*
* @return array
*/
public function detail(Request $request, $id)
{
// Load default layout for underlayer pages (ID = 2)
$Layout = $this->layoutRepository->get(Layout::DEFAULT_LAYOUT_UNDERLAYER_PAGE);
$News = $this->newsRepository->find($id);
if (!$News || !$News->isVisible()) {
throw new NotFoundHttpException();
}
// 公開日時をチェック
$now = new \DateTime();
if ($News->getPublishDate() > $now) {
throw new NotFoundHttpException();
}
return [
'Layout' => $Layout,
'News' => $News,
];
}
}