src/Mod/RestaurantBundle/Controller/Display/ActionController.php line 53

Open in your IDE?
  1. <?php
  2. namespace Mod\RestaurantBundle\Controller\Display;
  3. use AppBundle\Component\Util\Hash;
  4. use CustomBundle\Form\RestaurantSearchType;
  5. use Doctrine\ORM\NonUniqueResultException;
  6. use Doctrine\ORM\QueryBuilder;
  7. use Mod\RestaurantBundle\Entity\Banner;
  8. use Mod\RestaurantBundle\Entity\Restaurant;
  9. use Mod\RestaurantBundle\PageForm\RestaurantForm;
  10. use Mod\RestaurantBundle\Service\BundleUtility;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use CustomBundle\Controller\CustomFacilityDisplayBaseController as FacilityDisplayBaseController;
  16. class ActionController extends FacilityDisplayBaseController
  17. {
  18.     public $formClass RestaurantForm::class;
  19.     public $itemClass Restaurant::class;
  20.     public $views = [
  21.         "index" => "restaurant-search/index.php",
  22.         "detail" => "restaurant-search/detail.php",
  23.     ];
  24.     public $settings = [
  25.         "pageLimit" => 10,
  26.         "theme" => "restaurant-search",
  27.         "themeDirectory" => "CustomBundle:Default:page-builder/themes"
  28.     ];
  29.     public function before(FilterControllerEvent $event)
  30.     {
  31.         parent::before($event);
  32.         $this->default_setting $this->getDefaultParameter('mod_restaurant.default_settings');
  33.         $this->entity_setting $this->getDefaultParameter('mod_restaurant.entity_settings');
  34.         /** @var BundleUtility $util */
  35.         $util $this->get('mod_restaurant.bundle_utility');
  36.         if(isset($this->default_setting['list_limit'])){
  37.             $this->settings['pageLimit'] = $this->default_setting['list_limit'];
  38.         }
  39.     }
  40.     /**
  41.      * @Route("/restaurant-search/", name="mod_restaurant_top")
  42.      */
  43.     public function indexAction(Request $request)
  44.     {
  45.         $tags = [];
  46.         /** @var BundleUtility $util */
  47.         $util $this->get('mod_restaurant.bundle_utility');
  48.         $form $this->createForm(RestaurantSearchType::class, null, [
  49.             'method' => 'GET',
  50.             'csrf_protection' => false,
  51.         ]);
  52.         $form->handleRequest($request);
  53.         if($form->isSubmitted()) {
  54.             $tags $util->createTagList($request);
  55.         }
  56.         $order = ['sort_num' => 'ASC''this_month_recommendation' => 'DESC'];
  57.         $page $request->query->getInt('page'1);
  58.         if($page 1){
  59.             $page 1;
  60.         }
  61.         $limit $this->settings['pageLimit'];
  62.         $paginator $util->searchItems($request->query->all(), $order$limit$page);
  63.         if(isset($this->default_setting['pagination']['page_range'])){
  64.             $paginator->setPageRange($this->default_setting['pagination']['page_range']);
  65.         }
  66.         $pagination $this->getPaginationParams($paginator);
  67.         $items $paginator->getItems();
  68.         return $this->renderFront($this->views['index'], [
  69.             'cms__items' => $items,
  70.             'cms__pagination' => $pagination,
  71.             'cms__form' => $form->createView(),
  72.             'cms__tags' => $tags,
  73.             'cms__banner' => $this->getBanner(),
  74.         ]);
  75.     }
  76.     /**
  77.      * @Route("/restaurant-search/{id}/", name="mod_restaurant_detail")
  78.      */
  79.     public function detailAction(Request $request$id)
  80.     {
  81.         /** @var BundleUtility $util */
  82.         $item $this->findItemBy($request$this->itemClass, ['id' => $id]);
  83.         if(!$item){
  84.             throw new NotFoundHttpException();
  85.         }
  86.         $page_builder $this->createPageBuilder($this->formClass$item);
  87.         $page_builder->setTheme($this->settings['theme']);
  88.         $page_builder->setThemeDirectory($this->settings['themeDirectory']);
  89.         return $this->renderFront($this->views['detail'], [
  90.             'cms__item' => $item,
  91.             'cms__page_builder' => $page_builder,
  92.         ]);
  93.     }
  94.     // お店をさがす用のバナー取得
  95.     public function getBanner()
  96.     {
  97.         $repo $this->getDoctrine()->getRepository(Banner::class);
  98.         /** @var QueryBuilder $qb */
  99.         $qb $repo->createQueryBuilder('b');
  100.         $qb->addOrderBy('b.sort_num''ASC')
  101.             ->setMaxResults(1)
  102.         ;
  103.         try {
  104.             $result $qb->getQuery()->getOneOrNullResult();
  105.         } catch(NonUniqueResultException $e) {
  106.             $result null;
  107.         }
  108.         return $result;
  109.     }
  110.     // FormTypeにデータを渡す
  111.     protected function createForm($type$data null, array $options = [])
  112.     {
  113.         /** @var BundleUtility $util */
  114.         $util $this->get('mod_restaurant.bundle_utility');
  115.         $genres $util->transformData($util->getGenres());
  116.         $time_by_cars $util->transformData($util->getTimeByCars(), true'お車''分圏内');
  117.         $scenes $util->transformData($util->getScenes());
  118.         $features $util->transformData($util->getFeatures());
  119.         $options['genres'] = $genres;
  120.         $options['time_by_cars'] = $time_by_cars;
  121.         $options['scenes'] = $scenes;
  122.         $options['features'] = $features;
  123.         return parent::createForm($type$data$options);
  124.     }
  125. }