バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 再注文処理のフローについて

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
t.o
投稿日時: 2025/3/31 13:52
対応状況: −−−
新米
登録日: 2025/3/31
居住地:
投稿: 2
再注文処理のフローについて
### ▼テンプレート
- [EC-CUBE] 4.3
- [PHP] 8.1
- [データベース] MySQL
- [WEBサーバ] Apache
- [ブラウザ] Google Chrome

---

### ▼質問内容

現在、`ItemHolderValidator` を継承した独自のバリデータを作成し、`cart` フローで使用しています。
カートページでは正常に動作しているのですが、再注文処理から呼び出した場合にバリデータが動作していないように見えます。

`PurchaseFlow::validate()` にて、実行されているバリデータをログ出力したところ、`ItemValidator` のバリデータは実行されていることが確認できましたが、`ItemHolderValidator` のバリデータは実行されていませんでした。

これはEC-CUBEの仕様なのでしょうか?
それとも実装や設定に何か不足がある可能性があるのでしょうか?

もしご存じの方がいらっしゃれば、ご教示いただけますと幸いです。
よろしくお願いいたします。
tattsu
投稿日時: 2025/4/1 8:55
対応状況: −−−
仙人
登録日: 2023/12/23
居住地:
投稿: 413
Re: 再注文処理のフローについて
カスタマイズしていなければ再注文(mypage_orderのルーティング)で
ItemHolderValidatorも実行されるはずなので、何か不足がある可能性があるかと思います。


----------------
-------------------

各決済会社3Dセキュア実装・EC-CUBEバージョンアップ・不具合修正
お任せください。ゴールドパートナー。

t.o
投稿日時: 2025/4/1 9:26
対応状況: −−−
新米
登録日: 2025/3/31
居住地:
投稿: 2
Re: 再注文処理のフローについて
ありがとうございます。

やはりそうですよね。。
私も何度もコード読み直したんですが

public function validate(ItemHolderInterface $itemHolder, PurchaseContext $context)
    {
        $context->setFlowType($this->flowType);

        $this->calculateAll($itemHolder);

        $flowResult = new PurchaseFlowResult($itemHolder);

        foreach ($itemHolder->getItems() as $item) {
            foreach ($this->itemValidators as $itemValidator) {
                $result = $itemValidator->execute($item, $context);
                $flowResult->addProcessResult($result);
            }
        }

        $this->calculateAll($itemHolder);

        foreach ($this->itemHolderValidators as $itemHolderValidator) {
            $result = $itemHolderValidator->execute($itemHolder, $context);
            $flowResult->addProcessResult($result);
        }

        $this->calculateAll($itemHolder);


の部分で呼ばれるはずですよね。

一旦、別の方法で対処できたので大丈夫そうです。
何が原因か探ってみようと思います。

引用:

tattsuさんは書きました:
カスタマイズしていなければ再注文(mypage_orderのルーティング)で
ItemHolderValidatorも実行されるはずなので、何か不足がある可能性があるかと思います。


※追記
もしかして、cart に遷移する際に実行されているのは確認できていたのですが、そちらのことでしょうか?

foreach ($Order->getOrderItems() as $OrderItem) {
            try {
                if ($OrderItem->getProduct() && $OrderItem->getProductClass()) {
                    $this->cartService->addProduct($OrderItem->getProductClass(), $OrderItem->getQuantity());

                    // 明細の正規化
                    $Carts = $this->cartService->getCarts();
                    foreach ($Carts as $Cart) {
                        $result = $this->purchaseFlow->validate($Cart, new PurchaseContext($Cart, $this->getUser()));
                        // 復旧不可のエラーが発生した場合は追加した明細を削除.
                        if ($result->hasError()) {
                            $this->cartService->removeProduct($OrderItem->getProductClass());
                            foreach ($result->getErrors() as $error) {
                                $errorMessages[] = $error->getMessage();
                            }
                        }
                        foreach ($result->getWarning() as $warning) {
                            $errorMessages[] = $warning->getMessage();
                        }
                    }

                    $this->cartService->save();
                }
            } catch (CartException $e) {
                log_info($e->getMessage(), [$order_no]);
                $this->addRequestError($e->getMessage());
            }
        }

上記の処理内では、 ItemHolderValidator は呼ばれないということってありますか?
tattsu
投稿日時: 2025/4/1 22:02
対応状況: −−−
仙人
登録日: 2023/12/23
居住地:
投稿: 413
Re: 再注文処理のフローについて
引用:
$result = $this->purchaseFlow->validate($Cart, new PurchaseContext($Cart, $this->getUser()));


されているので、呼ばれるのではないでしょうか。

https://github.com/EC-CUBE/ec-cube/blob/4.3.0/src/Eccube/Service/PurchaseFlow/PurchaseFlow.php#L131

ここの$this->itemHolderValidatorsに、`ItemHolderValidator` を継承した独自のバリデータが含まれていれば呼ばれると思います。


----------------
-------------------

各決済会社3Dセキュア実装・EC-CUBEバージョンアップ・不具合修正
お任せください。ゴールドパートナー。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は104,359名です
総投稿数は112,461件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2330
5
umebius
2085
6
h_tanaka
1969
7
yuh
1900
8
mcontact
1684
9
red
1580
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
805
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
balisys
502


ネットショップの壺

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

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