【发布时间】:2017-02-19 02:08:07
【问题描述】:
今天我遇到了一个无法通过手册解决的问题。
我有一个案例,如果客户选择货到付款运输方式,我想跳过付款步骤。
到目前为止,我已经使用 onCashOnDeliveryShipmentSelect 方法在 sylius.order.post_select_shipping 上创建了一个事件监听器。
public function onCashOnDeliveryShipmentSelect(ResourceControllerEvent $event)
{
/** @var Order $order */
$order = $event->getSubject();
/** @var Shipment $shipment */
foreach ($order->getShipments() as $shipment) {
/** @var ShippingMethod $method */
$method = $shipment->getMethod();
if ($method->getCashOnDelivery()) {
$order = $this->selectPayment($order);
$this->getStateMachine($order)->apply(OrderCheckoutTransitions::TRANSITION_COMPLETE);
$this->container->get('sylius.manager.order')->flush();
}
}
}
private function selectPayment(Order $order)
{
$this->getStateMachine($order)->apply(OrderCheckoutTransitions::TRANSITION_SELECT_PAYMENT);
$paymentMethod = $this->container
->get('sylius.repository.payment_method')
->findOneByCode('cash_on_delivery');
foreach ($order->getPayments() as $payment) {
$payment->setMethod($paymentMethod);
}
$this->flush();
return $order;
}
private function getStateMachine(Order $order)
{
$stateMachineFactory = $this->container->get('sm.factory');
$stateMachine = $stateMachineFactory->get($order, OrderCheckoutTransitions::GRAPH);
return $stateMachine;
}
private function flush()
{
$this->container->get('sylius.manager.order')->flush();
}
一旦我完成结帐流程并选择将 cashOnDelivey 标志设置为 true 的方法,即使订单处理正确,我也会收到重定向循环错误。
【问题讨论】:
标签: sylius