バージョン選択

フォーラム

メニュー

オンライン状況

137 人のユーザが現在オンラインです。 (128 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 137
もっと...

サイト内検索

質問 > フロント機能 > カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
be-s
投稿日時: 2023/7/24 11:53
対応状況: 開発中
一人前
登録日: 2016/2/2
居住地: São Paulo
投稿: 115
カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。
[EC-CUBE] 4.0.4
[レンタルサーバ] AWS EC2冗長化設定
[OS] Linux
[PHP] 7.3.*
[データベース] MySQL 5.7.*(RDS)
[WEBサーバ] Apache/2.4.*
[ブラウザ] Chrome
[セッション管理]PdoSessionHandler
[現象]


https://a-zumi.net/eccube4-url-slug/

上記記事の商品詳細ページのSlug化を参考に致しましが商品一覧へアクセス時に下記エラーになってしまいます。
ProductConverter.phpからProductController.php間での値がうまく渡せてない気がします。


エラー内容

Eccube\Entity\Category object not found by the @ParamConverter annotation.



Slug化の変更点は以下になります。
なにとぞご教授お願いできないでしょうか



\app\Customize\Request\ProductConverter.php

    /**
     * 商品IDでも商品スラッグでも商品情報が取得できるようにする
     *
     * @param Request $request
     * @param ParamConverter $configuration
     * @return bool
     * @throws \ReflectionException
     */
    public function apply(Request $request, ParamConverter $configuration)
    {
        $id = $this->getIdentifier($request, $configuration->getOptions());
        if (false === $id || null === $id) {
            return false;
        }
        $slugCategory = [];
        
        if($configuration->getName() === "product_list_slug_url"){
            if($id){
                if (is_numeric($id)) {
                    // カテゴリIDの場合
                    $slugCategory = $this->categoryRepository->getCategory($id);
                } else {
                    // カテゴリスラッグの場合
                    $slugCategory = $this->categoryRepository->getCategoryIdFromSlugName($id);
                }
            }
            if($slugCategory){
                // リクエストにオブジェクトをセット
                $class = $configuration->getClass();
                $request->attributes->set((new \ReflectionClass($class))->getShortName(), $slugCategory);
                return true;
            }
        }
        return false;
    }

    /**
     * nameの内容によってのParamConverterを適用
     *
     * @param ParamConverter $configuration
     * @return bool
     */
    public function supports(ParamConverter $configuration)
    {
        if($configuration->getName() === "product_detail"){
            return true;
        }
        elseif($configuration->getName() === "product_list_slug_url"){
            return true;
        }
    }



\app\Customize\Controller\ProductController.php

    /**
     * 商品カテゴリ商品一覧画面.
     *
     * @Route("/products/list/{id}", name="product_list_slug_url", methods={"GET"})
     * @Template("Product/list.twig")
     * @ParamConverter("Category", name="product_list_slug_url", class="Eccube\Entity\Category", options={"id" = "id"})
     * 
     * @param Request $request
     * @param Paginator $paginator
     * @param Category $category
     * @return array
     */
     public function indexSlugUrl(Request $request, Paginator $paginator,Category $category)
     {
        return parent::indexSlugUrl($request,$paginator,$category);
     }





\src\Eccube\Controller\ProductController.php

    /**
     * 商品一覧画面.
     *
     * @Route("/products/list/{id}", name="product_list_slug_url", methods={"GET"}, requirements={"id" = "\d+"})
     * @Template("Product/list.twig")
     * @ParamConverter("Category", options={"repository_method" = "getCategory"})
     * 
     * @param Request $request
     * @param Paginator $paginator
     * @param Category $category
     * @return array
     */
    public function indexSlugUrl(Request $request, Paginator $paginator,Category $category)



\app\Customize\Twig\RoutingExtension.php

    /**
     * スラッグを持っている場合はスラッグのURLを生成、
     * スラッグを持っていない場合はIDのURLを生成
     *
     * @param string $name
     * @param array $parameters
     * @param false $schemeRelative
     * @return string
     */
    public function getUrl($name, $parameters = [], $schemeRelative = false)
    {
        if ($name === "product_list") {
            /** @var Category $category */
            $category = $this->categoryRepository->getCategory($parameters["id"]);

            if(!empty($category->getSlugName())) {
                // スラッグを持っているURLを生成
                return parent::getUrl("product_list", ["id" => $category->getSlugName()], $schemeRelative);
            } else {
                // スラッグを持っていないIDのURLを生成
                return parent::getUrl("product_list", ["id" => $category->getId()], $schemeRelative);
            }
        }
        return parent::getUrl($name, $parameters, $schemeRelative);
    }


表示させたいSlugありURL

    https://localhost/products/list/slugname


フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。 be-s 2023/7/24 11:53
     Re: カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。 h_tanaka 2023/7/28 10:41
       Re: カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。 be-s 2023/8/8 18:53
         Re: カテゴリのslug化で@ParamConverter annotationエラーが起こってしまいます。 be-s 2023/8/8 19:08

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は90,245名です
総投稿数は110,345件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1688
8
red
1571
9
mcontact
1356
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.