我需要在 Sylius Standard 中自定义结账流程。
我遵循此处的文档https://docs.sylius.com/en/1.12/cookbook/shop/checkout.html但它已经过时并且不适用于全新项目(acme演示项目)。我想 Symfony 6 的文档没有更新。
我尝试覆盖结帐状态机:
src/Resources/SyliusCoreBundle/config/app/state_machine/sylius_order_checkout.yml
app/Resources/SyliusCoreBundle/config/app/state_machine/sylius_order_checkout.yml
config/packages/sylius_order_checkout.yaml
中创建一个新文件或使用其他名称,如 config/packages/winzou_state_machine.yaml
内容是:
winzou_state_machine:
sylius_order_checkout:
class: "%sylius.model.order.class%"
property_path: checkoutState
graph: sylius_order_checkout
state_machine_class: "%sylius.state_machine.class%"
states:
cart: ~
addressed: ~
payment_skipped: ~
payment_selected: ~
completed: ~
transitions:
address:
from: [cart, addressed, payment_selected, payment_skipped]
to: addressed
skip_payment:
from: [addressed]
to: payment_skipped
select_payment:
from: [addressed, payment_selected]
to: payment_selected
complete:
from: [payment_selected, payment_skipped]
to: completed
callbacks:
after:
sylius_process_cart:
on: ["address", "select_payment"]
do: ["@sylius.order_processing.order_processor", "process"]
args: ["object"]
sylius_create_order:
on: ["complete"]
do: ["@sm.callback.cascade_transition", "apply"]
args: ["object", "event", "'create'", "'sylius_order'"]
sylius_save_checkout_completion_date:
on: ["complete"]
do: ["object", "completeCheckout"]
args: ["object"]
sylius_skip_shipping:
on: ["address"]
do: ["@sylius.state_resolver.order_checkout", "resolve"]
args: ["object"]
priority: 1
sylius_skip_payment:
on: ["address"]
do: ["@sylius.state_resolver.order_checkout", "resolve"]
args: ["object"]
priority: 1
但是当我清除缓存并使用
php bin/console debug:winzou:state-machine
进行调试时,我得到:
You have just selected: sylius_order_checkout
+--------------------+
| Configured States: |
+--------------------+
| cart |
| addressed |
| shipping_selected |
| shipping_skipped |
| payment_skipped |
| payment_selected |
| completed |
+--------------------+
如您所见,shipping_selected 和 shipping_skipped 仍然列出...为什么?
仅供参考,如果我直接在捆绑配置文件中进行相同的配置,它就可以工作
\vendor\sylius\sylius\src\Sylius\Bundle\CoreBundle\Resources\config\app\state_machine\sylius_order_checkout.yml
您可以尝试在“config/packages/_sylius.yaml”中覆盖它
只需在从 CoreBundle 导入后将此内容放在该行中https://github.com/Sylius/Sylius-Standard/blob/ce53ffc5327a2cff6a3d70be0c1b5c382ba00eed/config/packages/_sylius.yaml#L16
这应该覆盖从捆绑包导入的默认配置。如果您想从单独的文件加载它,您可能需要在 https://github.com/Sylius/Sylius-Standard/blob/ce53ffc5327a2cff6a3d70be0c1b5c382ba00eed/src/Kernel.php#L55
中添加该配置的负载