app/Customize/Controller/TopController.php line 46

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12.  namespace Customize\Controller;
  13.  use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  14.  use Symfony\Component\Routing\Annotation\Route;
  15.  use Eccube\Controller\TopController as BaseController;
  16.  use Customize\Repository\ProductRepository;
  17.  use Eccube\Form\Type\SearchProductType;
  18.  use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Symfony\Component\Form\FormFactoryInterface
  21. use Eccube\Form\Type\AddCartType;
  22.  
  23.  class TopController extends BaseController
  24.  {
  25.     protected $productRepository;
  26.     protected $formFactory;
  27.  
  28.      // コンストラクタで ProductRepository を注入
  29.      public function __construct(
  30.         ProductRepository $productRepository,
  31.         FormFactoryInterface $formFactory
  32.     )
  33.      {
  34.          $this->productRepository $productRepository;
  35.          $this->formFactory $formFactory;
  36.      }
  37.  
  38.     /**
  39.      * @Route("/", name="homepage", methods={"GET"})
  40.      * @Template("index.twig")
  41.      */
  42.     public function index(): array
  43.     {
  44.         // 新着タグ商品取得
  45.         $Products_new $this->findProductsWithForms(1); // タグID 1 = 新着
  46.         $Products_semi $this->findProductsWithForms(2); // タグID 2 = 準新作
  47.         $forms array_merge($Products_new['forms'], $Products_semi['forms']);
  48.         // カテゴリ確認ログ出力
  49.         foreach ($Products_new['products'] as $Product) {
  50.             /** @var \Eccube\Entity\ProductCategory $ProductCategory */
  51.             foreach ($Product->getProductCategories() as $ProductCategory) {
  52.                 $Category $ProductCategory->getCategory();
  53.                 if ($Category) {
  54.                     log_info('[' $Product->getId() . '] カテゴリ: ' $Category->getName());
  55.                 } else {
  56.                     log_info('[' $Product->getId() . '] カテゴリ情報なし');
  57.                 }
  58.             }
  59.         }
  60.         return array_merge(parent::index(), [
  61.             'Products_new' => $Products_new['products'],
  62.             'Products_semi' => $Products_semi['products'],
  63.             'forms_new' => $Products_new['forms'], 
  64.             'forms_semi' => $Products_semi['forms'], 
  65.         ]);
  66.     }
  67.     /**
  68.      * findByFixedTag() を用いて商品を取得し、カートフォームを適用
  69.      */
  70.     private function findProductsWithForms(int $tagId)
  71.     {
  72.         // `findByFixedTag()` を使用してタグ付き商品を取得
  73.         $products $this->productRepository->findByFixedTag($tagId);
  74.         // 商品IDリストを取得
  75.         $ids array_map(fn($Product) => $Product->getId(), $products);
  76.         $ProductsAndClassCategories $this->productRepository->findProductsWithSortedClassCategories($ids'p.id');
  77.         // カートフォーム作成
  78.         $forms = [];
  79.         foreach ($products as $Product) {
  80.             $builder $this->formFactory->createNamedBuilder(
  81.                 '',
  82.                 AddCartType::class,
  83.                 null,
  84.                 [
  85.                     'product' => $ProductsAndClassCategories[$Product->getId()],
  86.                     'allow_extra_fields' => true,
  87.                 ]
  88.             );
  89.             $addCartForm $builder->getForm();
  90.             $forms[$Product->getId()] = $addCartForm->createView();
  91.         }
  92.         return [
  93.             'products' => $ProductsAndClassCategories,
  94.             'forms' => $forms,
  95.         ];
  96.     }
  97.  }
  98.  
  99.