EC-CUBE 東京UG 勉強会 / 2019-02-07 レポート
EC-CUBEの勉強会レポート
日時: 2019年2月7日 19:00から 場所: Connecting The Dots YOYOGI / B1
初めて、EC-CUBEの勉強会に参加しました。勉強会の内容と所感を交えて、レポートを残します。今回のテーマは注文明細に値引きを追加や、送料計算のカスタマイズなどをすることができるPurchaseFlowの仕組みを理解する勉強で、設計されたEC-CUBEエバンジェリストの足立さんから、ご説明いただきました。内容はサンプルコードの提示と処理内容が表などにまとめられいて、とても理解しやすかったです。
スライド
参考資料
サンプルコード
PurchaseFlowの仕様ドキュメント
http://doc4.ec-cube.net/customize_service
ドキュメントに誤りがあり(2019年2月8日現在)
独自に作成した Processor を有効にするには、 app/config/eccube/packages/purchaseflow.yaml の定義を修正します。
とありますが、Processorクラスにアノテーションを指定し、所定のディレクトリに設置すると、自動でロードされ実行されてる仕組みになっています。
use Eccube\Annotation\ShoppingFlow;
use Eccube\Service\PurchaseFlow\DiscountProcessor;
/**
* @ShoppingFlow
*/
class NebikiProcessor implements DiscountProcessor {
アノテーションには、他に「@CartFlow」「@OrderFlow」が指定できます。 インターフェイスには、他に「ItemValidator」「ItemHolderValidator」などが指定できます。 詳細はスライドやドキュメントを確認してください。
Github Issue
https://github.com/EC-CUBE/ec-cube/pull/2424
質疑応答
(勉強会のあとTwitterなどで収集した情報を編集して記載しています。)
Q. カスタマイズしたファイルはどこにおけばよいの?
A. app/CustomizeかApp/Plugin配下に設置すればどこでも読まれるようになっている。
ロードされるパスなどの設定は以下のファイルで行っている:
- app/config/eccube/services.yaml
- src/Eccube/DepenjencyInjection/*
- src/Eccube/Kernel::build()
Q. 既存のProcessorを消したり、処理の順番は入れ替えられるの?
A. 可能。ただし、本体の設定ファイルを編集する必要がある。
app/config/eccube/packages/purchaseflow.yaml
45 # Purchase Flow for Shopping
46 eccube.purchase.flow.shopping:
47 class: Eccube\Service\PurchaseFlow\PurchaseFlow
48 calls:
49 - [setFlowType, ['shopping']]
50 - [setItemValidators, ['@eccube.purchase.flow.shopping.item_validators']]
51 - [setItemHolderValidators, ['@eccube.purchase.flow.shopping.holder_validators']]
52 - [setItemHolderPreprocessors, ['@eccube.purchase.flow.shopping.holder_preprocessors']]
53 - [setDiscountProcessors, ['@eccube.purchase.flow.shopping.discount_processors']]
54 - [setItemHolderPostValidators, ['@eccube.purchase.flow.shopping.holder_post_validators']]
55 - [setPurchaseProcessors, ['@eccube.purchase.flow.shopping.purchase']]
Q. Processorの実行途中で、次のProcessorに行かないような処理はできるの?
A. 止められない。
Q. Processorの実行状況、結果をロギングする仕組みはあるのか?
A. 実装していない。
Q. Processorの中で例外エラーが発生した時はどう取り扱う?
A. Processor処理内容、エラー内容で適宜判断。
Q. Symfonyのworkflowは使っているのか?
A. 使用していない、独自実装。workflowバンドルば別のところで使用している。
Workflow の参考リンク:
Q. PurchaseFlowで実装できなかったカスタマイズはあるか?
A. 通常便、クール便を含んだ注文の場合、配送種別毎にシステム側で配送先データを生成する必要があった。PurchaseFlowの仕組みでは、要求が実現できず、本体のソースコードを編集して実現した。
最後に
皆さん何かしらの目的をもって参加されていて、大半の方がエンジニア、フリーランスのクリエイター、店舗オーナー、決済会社の方達で、知り合いだけで固まっているような感じはなく、はじめての方でも、気負うことなく参加できる勉強会だと思いました。登壇者の方以外にも、参加者の皆さんから色々なお話を聞けて、とめもためになりました。 勉強会の題材のドキュメントやソースコードは事前にもっと確認しておけば、より身についたなーと。次回に活かそうと思います。