<?php
namespace App\Controller\Mvc;
use App\Service\Entry\FrontService;
use App\Utils\TargetChoiceUtil;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/modelplan")
*/
class modelplanController extends AbstractController
{
/**
* @Route ("/", name="modelplan_index", methods={"GET"})
*/
public function index(
Request $request,
FrontService $service
) {
$service
->setType(TargetChoiceUtil::MODELPLAN)
->setLocale($request->getLocale())
;
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromRequest($request);
$filter = $service->handleRequest($filter, $criteria);
$qb = $service->getQueryBuilderForList();
$service->addDqlWhere($qb, $filter);
$qb->orderBy("RAND()");
$criteria['limit'] = 9999; // 一旦1ページを9999に設定
$paginate = $service->handleList($qb, $criteria);
$query = $service->createQueryFromFilter($filter);
$query4area = $query;
unset($query4area['area']);
return $this->render('pages/modelplan/index.html.twig', [
"paginate" => $paginate,
"data" => $paginate->getPaginator()->getIterator(),
"filter" => $filter,
"query" => $query,
"query4area" => $query4area
]);
}
/**
* @Route ("/filter", name="modelplan_filter", methods={"GET"})
*/
public function filter(
Request $request,
FrontService $service
) {
$service
->setType(TargetChoiceUtil::MODELPLAN)
->setLocale($request->getLocale())
;
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromRequest($request);
$filter = $service->handleRequest($filter, $criteria);
$query = $service->createQueryFromFilter($filter);
return $this->render('pages/modelplan/filter.html.twig', [
"filter" => $filter,
"query" => $query
]);
}
/**
* @Route("/{id}", name="modelplan_detail", methods={"GET"}, requirements={"id" = "\d+"})
*/
public function detail(
Request $request,
FrontService $service,
int $id
) {
$service
->setType(TargetChoiceUtil::MODELPLAN)
->setLocale($request->getLocale())
;
$entry = $service->getOneEntry($id);
if(!$entry) {
throw new NotFoundHttpException('Entry not found.');
}
$filter = $service->getFilter();
$criteria = $service->getCriteriaFromSession($request);
$filter = $service->handleRequest($filter, $criteria);
$query = $service->createQueryFromFilter($filter);
return $this->render('pages/modelplan/detail.html.twig', [
"entry" => $entry,
"query" => $query,
"recommend" => $service->getRelatedEntry($entry)
]);
}
/**
* @Route("/recommend", name="modelplan_recommend", methods={"GET"})
*/
public function recommend(
Request $request,
FrontService $service
): Response {
$limit = $request->query->has('limit')? intval($request->query->get('limit')) : 6;
return $this->render('pages/modelplan/recommend.html.twig', [
"data" => $service->getRecommends($limit)
]);
}
}