質問 > フロント機能 > 商品詳細画面URLでの商品ID変換について |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yamu16 |
投稿日時: 2021/1/13 14:11
対応状況: 解決済
|
新米 登録日: 2021/1/13 居住地: 投稿: 6 |
商品詳細画面URLでの商品ID変換について 前提:URL末尾の商品IDを数値そのままではなく、可逆変換した状態で直接リンクするURLを利用したい。
試した事:eccube4直下の「.htaccess」上で変換をかけてみようとしたが、index.phpに渡される部分が変わらないようで失敗。 (RewriteRuleで変換後にリダイレクトするとURLが書き換わるので意図した状態とならない) その後調査した事: src/Eccube/Controller/ProductController.php 商品詳細画面の@Routeアノテーションの中で requirements={"id" = "[a-zA-Z0-9]"} と、半角英字も対象としましたが、 その先で、どこのソースでIDの文字数値→数値変換を行えばよいのか見つからない状態です。 質問1: @ParamConverterを利用している段階で、Productのidを数値以外で取得不能でしょうか? 質問2: (質問1が負荷の場合:URLを演算後の数値のみとして対応) どこで元の数値への復元処理を行えばその後の処理を修正せずに対応可能でしょうか? |
468 |
投稿日時: 2021/1/13 16:03
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 商品詳細画面URLでの商品ID変換について @ParamConverteで指定されてる"repository_method" = "findWithSortedClassCategories"は
ProductRepository->findWithSortedClassCategories()を指定しているかと思います。 新しいメソッドをProductRepositoryに追加して@ParamConverteの指定を変更すれば 目的の値でProductを取得する事は可能と思います。
|
yamu16 |
投稿日時: 2021/1/13 18:21
対応状況: −−−
|
新米 登録日: 2021/1/13 居住地: 投稿: 6 |
Re: 商品詳細画面URLでの商品ID変換について 468様
早々のご回答ありがとうございます。 下記対応で無事に動きました。 src/Eccube/Repository/ProductRepository.php 内に、findWithSortedClassCategoriesを元にして findWithSortedClassCategoriesFromEncryptIdを作成。 試しに数値のみとする変換を行い、 $decryptId = preg_replace('/[^0-9]/', '', $productId); 検索用パラメータを置き換えて実装しました。 ->setParameter('id', $decryptId) ProductController.phpのアノテーションを下記のように修正しました。 (requirementsの+抜けミスは修正済) * 商品詳細画面. * * @Route("/products/detail/{id}", name="product_detail", methods={"GET"}, requirements={"id" = "[a-zA-Z0-9]+"}) * @Template("Product/detail.twig") * @ParamConverter("Product", options={"repository_method" = "findWithSortedClassCategoriesFromEncryptId"}) ※うまく修正後の情報が読み込まれず、旧メソッドが呼ばれていたのですが、管理画面からキャッシュ削除を実行したら反映されました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |