EC-CUBE 東京UG 勉強会 / 2019-02-07 レポート
場所:Connecting The Dots YOYOGI / B1
初めて、EC-CUBEの勉強会に参加しました。勉強会の内容と所感を交えて、レポートを残します。
今回のテーマは注文明細に値引きを追加や、送料計算のカスタマイズなどをすることができるPurchaseFlowの仕組みを理解する勉強で、設計されたEC-CUBEエバンジェリストの足立さんから、ご説明いただきました。内容はサンプルコードの提示と処理内容が表などにまとめられいて、とても理解しやすかったです。
スライド
https://www.slideshare.net/chihiroadachi3/201927-eccubeugpurchaseflow-130874190?fbclid=IwAR1VAYGVyPoFh8tTsTKbLt-p7zIIRrh2YeoB0TtyztygFf13cVPmzpMgG4s参考資料
サンプルコード
https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8347c0a8fae9acc1ced74bf6e967…demo-tokyo?fbclid=IwAR3CTDTc6U-Rvobd4hsXn_fK-3etcBtWf6_U6tGgNZSBWqHEt66ADr19XlIPurchaseFlowの仕様ドキュメント
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バンドルば別のところで使用している。
Workfflow の参考リンク
https://symfony.com/doc/3.4/components/workflow.html
https://a-zumi.net/eccube4-cancel-status/
https://github.com/EC-CUBE/ec-cube/pull/3325
- Q.PurchaseFlowで実装できなかったカスタマイズはあるか?
- A.通常便、クール便を含んだ注文の場合、配送種別毎にシステム側で配送先データを生成する必要があった。PurchaseFlowの仕組みでは、要求が実現できず、本体のソースコードを編集して実現した。
最後に
皆さん何かしらの目的をもって参加されていて、大半の方がエンジニア、フリーランスのクリエイター、店舗オーナー、決済会社の方達で、知り合いだけで固まっているような感じはなく、はじめての方でも、気負うことなく参加できる勉強会だと思いました。登壇者の方以外にも、参加者の皆さんから色々なお話を聞けて、とめもためになりました。勉強会の題材のドキュメントやソースコードは事前にもっと確認しておけば、より身についたなーと。次回に活かそうと思います。