バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > カート内の商品を「複数」削除すると"予期しないエラー"となる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ino88
投稿日時: 2021/1/28 15:04
対応状況: −−−
新米
登録日: 2021/1/28
居住地:
投稿: 5
カート内の商品を「複数」削除すると"予期しないエラー"となる
▼テンプレート
[EC-CUBE] 4.0.5
[レンタルサーバ] ローカル(XAMPP)
[OS] Windows NT
[PHP] 7.4.11
[データベース] MySQL 10.4.14-MariaDB
[WEBサーバ] Apache/2.4.46
[ブラウザ] Google Chrome
[導入プラグインの有無] 無し
[カスタマイズの有無] 有り
[現象]

初めて投稿します。よろしくお願いいたします。

「カート画面(/cart)からショッピング画面(/shopping)へ遷移する際、カート内商品の価格等の商品情報を最新データと照合し、相違があればカートから該当の商品を削除してからショッピング画面を表示する」
という機能を実装しようとしています。
実装は、ShoppingControllerを継承した「ShoppingControllerExtends.php」を作成し、「function index」をオーバーライドする形で行っています。
なお、商品の最新データは別のサーバからAPIで取ってきています。
以下に追加したソースを貼ります。


app\Customize\Controller\ShoppingControllerExtends.php
public function index(PurchaseFlow $cartPurchaseFlow)
{
    // ログイン状態のチェック.
    (省略)

    // カートチェック.
    (省略)

    // 最新データ整合性チェック
    $CartItems = $Cart->getCartItems();
    $removeItems = [];

    try {
        foreach ($CartItems as $CartItem) {
            // ここでごにょごにょして、削除対象の商品の$ProductClassを配列に入れます。
            $removeItems[] = $ProductClass;
        }

        if (!empty($removeItems)) {
            log_info('[注文手続] 最新データ不整合.カートから商品を削除する処理開始.');

            foreach ($removeItems as $removeItem) {
                $this->cartService->removeProduct($removeItem);
            }
            $Cart = $this->cartService->getCart();  // ★エラー発生箇所

            // カートが空になった場合はカート画面へ戻す
            if (is_null($Cart)) {
                $this->addError('販売が停止されている商品がカートから削除されました。', 'front.cart');

                return $this->redirectToRoute('cart');
            }

            // カート内に商品が残っていた場合は、そのまま進みます。
            $cartPurchaseFlow->validate($Cart, new PurchaseContext());
            $this->cartService->save();
        }

    } catch (\Exception $e) {
        log_error('[注文処理] カートから商品を削除する際にエラーが発生しました.', [$e->getMessage()]);

        $this->addError('front.shopping.system_error');

        return $this->redirectToRoute('shopping_error');
    }

    (以下省略)
}



カート内の商品数が1つであっても複数であっても、削除対象商品が1件の場合は問題なく通過します。
ところが、削除対象商品が2つ以上あった場合、ソース内「★エラー箇所」で例外が発生します。メッセージ内容は以下です。

Entity has to be managed or scheduled for removal for single computation Eccube\Entity\CartItem@000000007d34797c0000000028111ad1



どこに問題があるのか、皆様のお力添えをいただけないでしょうか。
よろしくお願いいたします。
umebius
投稿日時: 2021/1/31 0:22
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カート内の商品を「複数」削除すると"予期しないエラー"となる
商品を追加するときだったか削除するときだったか確か両方で、
$cartPurchaseFlow->validateを1アイテムごとに実行しないと、そのエラーになったような気がします。
記憶違いだったら申し訳ございません。
devbell
投稿日時: 2021/1/31 21:15
対応状況: −−−
半人前
登録日: 2020/4/10
居住地:
投稿: 19
Re: カート内の商品を「複数」削除すると"予期しないエラー"となる
ino88
投稿日時: 2021/2/1 11:49
対応状況: 解決済
新米
登録日: 2021/1/28
居住地:
投稿: 5
Re: カート内の商品を「複数」削除すると"予期しないエラー"となる
umebius様、devbell様、ご返信ありがとうございます。

お二人の仰る通り、CartControllerのremove操作の後にValidateが入っていましたので最初は入れていたのですが、そこでもエラーが発生し解消できなかったため外していました。
しかしながら、お二人に頂いたご意見からやはりそこは必要だということで、Validateを入れて検証していましたら、無事、実装することができました。

Validateを入れていた際に発生していたエラーの原因は、purchaseFlowのカスタマイズ箇所でした・・・大変失礼いたしました。
今回相談させていただいた機能とは直接関係のないところが原因でしたが、お二人のご意見からエラー箇所を絞ることができ、解決に至りました。
本当にありがとうございました。今後ともよろしくお願いいたします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,688名です
総投稿数は109,933件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1279
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.