ShoppingControllerの中で、配送先(CustomerAddress)がどのようにセットされているか、調べてみた。
目次
- 目次
- 受注ステータスがorder_processingの受注を取得
- is_null(order_processing)の場合
- getShippingFormBuilder($Order)
- builder->getForm()
- 結論
受注ステータスが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が存在し、配送先情報もそちらを活用している。