Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

ECCUBE3のShippingControllerは、配送先をどう処理しているか

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

ShoppingControllerの中で、配送先(CustomerAddress)がどのようにセットされているか、調べてみた。

目次

受注ステータスがorder_processingの受注を取得

92行目付近で、受注ステータスorder_processingのものを取り出している。

$Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);

このタイミングでは、Order.shippingsは空になっている。

ただし、「数量の変更・削除」でCartに戻ってから来ると、こちらに情報が入った状態になる。Shippingsは空。

is_null(order_processing)の場合

110行目付近で、$Customerを元に受注情報を作成する。

$Order = $app['eccube.service.shopping']->createOrder($Customer);

この時に、ShoppingServiceの方では、regisgerPreOrder($Customer, $preOrderId)からgetNewShipping($Order, $Customer, $deliveries)copyToShippingFromCustomer($Shipping, $Customer)といった処理が行なわれ、つまりどうやら$Customerの情報からShippingをつくり直しているようだ。

Order.shippingsは空。

getShippingFormBuilder($Order)

120行目付近。getShippingFormBuilderは、ShoppingFormTypeを利用してBuilderを作る。

 $builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);

この段階で、Order.shippingsの中身が入ってくる。ただしPref.idは入っているがPref.nameは入っていないなど一部不完全な模様。

builder->getForm()

135行目付近

  $form = $builder->getForm();

このタイミングでOrder.shippingsの中のPref.nameなども正しい値が入ってくる。

結論

つまりカートから来た場合は、order_processingがnullになっており、Customer情報からCustomerAddressをつくり直している。 配送先情報変更から戻ってきた場合は、order_processingが存在し、配送先情報もそちらを活用している。