如何在 Sylius 中自定义结账状态机(例如覆盖 Symfony 中的配置)

问题描述 投票:0回答:1

我需要在 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_selectedshipping_skipped 仍然列出...为什么?

仅供参考,如果我直接在捆绑配置文件中进行相同的配置,它就可以工作

\vendor\sylius\sylius\src\Sylius\Bundle\CoreBundle\Resources\config\app\state_machine\sylius_order_checkout.yml

symfony sylius
1个回答
0
投票

您可以尝试在“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

中添加该配置的负载
© www.soinside.com 2019 - 2024. All rights reserved.