<?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 Eccube\Controller;
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;
/**
* NewsController constructor.
*
* @param NewsRepository $newsRepository
*/
public function __construct(NewsRepository $newsRepository)
{
$this->newsRepository = $newsRepository;
}
/**
* お知らせ一覧画面.
*
* @Route("/news", name="news_list", methods={"GET"})
* @Template("News/list.twig")
*/
public function index(Request $request, PaginatorInterface $paginator)
{
// handleRequestは空のqueryの場合は無視するため
if ($request->getMethod() === 'GET') {
$request->query->set('pageno', $request->query->get('pageno', ''));
}
$qb = $this->newsRepository->getQueryBuilderAll();
// 公開されているNewsのみをフィルター
$qb->where('n.visible = :visible')
->setParameter('visible', true);
// 公開日時前のNewsをフィルター
$now = new \DateTime();
$qb->andWhere('(n.publish_date IS NULL OR n.publish_date <= :now)')
->setParameter('now', $now);
// ページ番号を取得し、1以上であることを保証
$pageno = $request->query->get('pageno');
$pageno = !empty($pageno) && is_numeric($pageno) && (int)$pageno > 0 ? (int)$pageno : 1;
$pagination = $paginator->paginate(
$qb->getQuery(),
$pageno,
10 // 1ページあたりの表示件数
);
return [
'pagination' => $pagination,
];
}
/**
* お知らせ詳細画面.
*
* @Route("/news/{id}", name="news_detail", requirements={"id" = "\d+"}, methods={"GET"})
* @Template("News/detail.twig")
*/
public function detail(Request $request, $id)
{
$News = $this->newsRepository->find($id);
if (!$News || !$News->isVisible()) {
throw new NotFoundHttpException();
}
// 公開日時前のNewsは表示しない
$now = new \DateTime();
if ($News->getPublishDate() && $News->getPublishDate() > $now) {
throw new NotFoundHttpException();
}
return [
'News' => $News,
];
}
}