app/Plugin/Recipe/Controller/RecipeController.php line 65

Open in your IDE?
  1. <?php
  2. namespace Plugin\Recipe\Controller;
  3. use Eccube\Controller\AbstractController;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Knp\Component\Pager\PaginatorInterface;
  8. use Plugin\Recipe\Form\Type\SearchRecipeType;
  9. use Plugin\Recipe\Repository\RecipeRepository;
  10. use Plugin\Recipe\Repository\TagRepository;
  11. use Plugin\Recipe\Repository\MaterialRepository;
  12. use Plugin\Recipe\Repository\CategoryRepository;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. class RecipeController extends AbstractController
  15. {
  16.     /**
  17.      * @var RecipeRepository
  18.      */
  19.     protected $recipeRepository;
  20.     /**
  21.      * @var TagRepository
  22.      */
  23.     protected $tagRepository;
  24.     /**
  25.      * @var CategoryRepository
  26.      */
  27.     protected $categoryRepository;
  28.     /**
  29.      * @var MaterialRepository
  30.      */
  31.     protected $materialRepository;
  32.     /**
  33.      * RecipeController constructor.
  34.      *
  35.      * @param RecipeRepository $recipeRepository
  36.      * @param TagRepository $tagRepository
  37.      * @param CategoryRepository $categoryRepository
  38.      * @param MaterialRepository $materialRepository
  39.      */
  40.     public function __construct(
  41.       RecipeRepository $recipeRepository,
  42.       TagRepository $tagRepository,
  43.       CategoryRepository $categoryRepository,
  44.       MaterialRepository $materialRepository
  45.     )
  46.     {
  47.         $this->recipeRepository $recipeRepository;
  48.         $this->tagRepository $tagRepository;
  49.         $this->categoryRepository $categoryRepository;
  50.         $this->materialRepository $materialRepository;
  51.     }
  52.     /**
  53.      * レシピ一覧ページ
  54.      * @Route("/recipe", name="recipe", methods={"GET"})
  55.      * @Template("Recipe/Resource/template/default/index.twig")
  56.      */
  57.     public function index(Request $requestPaginatorInterface $paginator)
  58.     {
  59.         // handleRequestは空のqueryの場合は無視するため
  60.         if ($request->getMethod() === 'GET') {
  61.             $request->query->set('pageno'$request->query->get('pageno'''));
  62.         }
  63.         // searchForm
  64.         /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  65.         $builder $this->formFactory->createNamedBuilder(''SearchRecipeType::class);
  66.         if ($request->getMethod() === 'GET') {
  67.             $builder->setMethod('GET');
  68.         }
  69.         /* @var $searchForm \Symfony\Component\Form\FormInterface */
  70.         $searchForm $builder->getForm();
  71.         $searchForm->handleRequest($request);
  72.         // paginator
  73.         $searchData $searchForm->getData();
  74.         $qb $this->recipeRepository->getQueryBuilderBySearchData($searchData);
  75.         $query $qb->getQuery();
  76.         /** @var SlidingPagination $pagination */
  77.         $pagination $paginator->paginate(
  78.             $query,
  79.             !empty($searchData['pageno']) ? $searchData['pageno'] : 1,
  80.             $this->eccubeConfig['plugin_recipe.front.page_count']
  81.         );
  82.         // category
  83.         $Category $searchForm->get('category_id')->getData();
  84.         $Categories $this->categoryRepository->getList();
  85.         // tag
  86.         $Tag $searchForm->get('tag_id')->getData();
  87.         $Tags $this->tagRepository->getList();
  88.         // material
  89.         $Material $searchForm->get('material_id')->getData();
  90.         $Materials $this->materialRepository->getList();
  91.         // subtitle
  92.         $subtitle 'レシピ一覧';
  93.         switch (true) {
  94.             case $searchData['name']:
  95.                 $subtitle $searchData['name'] . 'の検索結果';
  96.                 break;
  97.             case $Category:
  98.                 $subtitle $Category->getName() . 'のレシピ';
  99.                 break;
  100.             case $Tag:
  101.                 $subtitle $Tag->getName() . 'のレシピ';
  102.                 break;
  103.             case $Material:
  104.                 $subtitle $Material->getName() . 'のレシピ';
  105.                 break;
  106.         }
  107.         // form is empty
  108.         $filterFlg true;
  109.         if (
  110.           empty($searchData['name']) &&
  111.           empty($Category) &&
  112.           empty($Tag) &&
  113.           empty($Material)
  114.         ) {
  115.           $filterFlg false;
  116.         }
  117.         return [
  118.             'subtitle' => $subtitle,
  119.             'pagination' => $pagination,
  120.             'search_form' => $searchForm->createView(),
  121.             'Category' => $Category,
  122.             'Categories' => $Categories,
  123.             'Tag' => $Tag,
  124.             'Tags' => $Tags,
  125.             'Material' => $Material,
  126.             'Materials' => $Materials,
  127.             'filterFlg' => $filterFlg,
  128.         ];
  129.     }
  130.     /**
  131.      * レシピ詳細ページ
  132.      * @Route("/recipe/detail/{id}", name="recipe_detail", methods={"GET"}, requirements={"id" = "\d+"})
  133.      * @Template("Recipe/Resource/template/default/detail.twig")
  134.      *
  135.      * @param Request $request
  136.      */
  137.     public function detail(Request $request$id)
  138.     {
  139.         $Recipe $this->recipeRepository->find($id);
  140.         if (!$Recipe || !$Recipe->getPublic()) {
  141.             throw new NotFoundHttpException();
  142.         }
  143.         // searchForm
  144.         /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  145.         $builder $this->formFactory->createNamedBuilder(''SearchRecipeType::class);
  146.         if ($request->getMethod() === 'GET') {
  147.             $builder->setMethod('GET');
  148.         }
  149.         /* @var $searchForm \Symfony\Component\Form\FormInterface */
  150.         $searchForm $builder->getForm();
  151.         $searchForm->handleRequest($request);
  152.         // category
  153.         $Categories $this->categoryRepository->getList();
  154.         // tag
  155.         $Tags $this->tagRepository->getList();
  156.         // material
  157.         $Materials $this->materialRepository->getList();
  158.         return [
  159.             'Recipe' => $Recipe,
  160.             'search_form' => $searchForm->createView(),
  161.             'Categories' => $Categories,
  162.             'Tags' => $Tags,
  163.             'Materials' => $Materials,
  164.         ];
  165.     }
  166. }