Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
概要(Overview・Refs Issue)
下記のタイミングで注文手続き画面の商品種別が入れ替わってしまう問題の修正
方針(Policy)
注文フロー内でセッションに保存しているカートキーの先頭が変わらないようにする
実際は先頭にあるカートが優先されるという仕組みを変えた方がいい気がしますが、影響範囲が大きそうなので最低限の修正で暫定対応する方針
今までどんな仕組みになっていたかと思ったのですが、そう言えば3系ではカート1つしかなかったんですね‥。
もしセッションのcart_keysの順番に依存しないようにするなら、どのカートor受注がアクティブかということをセッションに持たせる等になるのでしょうか。
このPRでは
$this->cartService->save();
の代わりに$this->cartService->setPrimary($Cart->getCartKey());
を実行して対象のカートが先頭で保存されるようにしています。(saveはsetPrimary内部で実行されています)そもそも注文フロー内ではOrder.pre_order_idからカートを取得すればいいのではとも思いましたが
考えてみると下記のコードのように購入処理中の受注を取得するために先にカート情報を取得しているので大変そうだなと。
ec-cube/src/Eccube/Controller/ShoppingController.php
Lines 250 to 257 in 4e213a8
実装に関する補足(Appendix)
テスト(Test)
warningの方は@ShoppingFlowで$this->throwInvalidItemException('エラー', true);を実行してみて確認
相談(Discussion)
良い解決方法があれば教えて欲しいです。
マイナーバージョン互換性保持のための制限事項チェックリスト
レビュワー確認項目