Symfony Sylius如何覆盖CoreBundle签出过程

Symfony Sylius如何覆盖CoreBundle签出过程,symfony,overriding,checkout,sylius,Symfony,Overriding,Checkout,Sylius,我正在做一个项目,我想寻求一个干净/最好的方法来覆盖项目中的步骤 Sylius\Bundle\CoreBundle\Checkout\CheckoutProcessScenario 我想保留整个过程的自定义机制,只需在末尾添加一个自定义步骤并删除finalize步骤 $builder ->add('security', 'sylius_checkout_security') ->add('addressing', 'sylius_checkou

我正在做一个项目,我想寻求一个干净/最好的方法来覆盖项目中的步骤

Sylius\Bundle\CoreBundle\Checkout\CheckoutProcessScenario

我想保留整个过程的自定义机制,只需在末尾添加一个自定义步骤并删除finalize步骤

    $builder
        ->add('security', 'sylius_checkout_security')
        ->add('addressing', 'sylius_checkout_addressing')
        ->add('shipping', 'sylius_checkout_shipping')
        ->add('finalize', 'sylius_checkout_finalize')
        ->add('payment', 'sylius_checkout_payment')
        ->add('purchase', 'sylius_checkout_purchase')
    ;
这样做的最佳形式是什么?如果它正在扩展捆绑包并覆盖它,我希望得到一些帮助,至少提供一些信息,为我指明正确的方向-目前我自己没有得到任何结果

我已经阅读了捆绑包本身的文档,但它没有解释如何覆盖内置流程

我还阅读了symfony关于扩展资源的食谱:

以及:


如果有人对此有一些经验,并愿意分享他们的见解,我将不胜感激。提前感谢。

您可以将服务类别更改为自定义类别。 您可以覆盖参数sylius.checkout\u scenario.class

app/config/config.yml:


您的\类

我做的有点不同,但重点仍然很好:)

我所做的是使用服务编译器用我自己的类重写它,并重写原始文件。基本原理如下所述:

在服务和配置部分:)

然后我只需要包含编译器过程

// src/Acme/ShopBundle/AcmeShopBundle.php
namespace Acme\ShopBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;

use Acme\ShopBundle\DependencyInjection\Compiler\CustomCompilerPass;

class AcmeMailerBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        parent::build($container);

        $container->addCompilerPass(new CustomCompilerPass());
    }
}
在编译器过程中,我只是扩展了基文件并重写了所需的函数。放下它,以防有人需要指向正确的方向

// src/Acme/ShopBundle/AcmeShopBundle.php
namespace Acme\ShopBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;

use Acme\ShopBundle\DependencyInjection\Compiler\CustomCompilerPass;

class AcmeMailerBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        parent::build($container);

        $container->addCompilerPass(new CustomCompilerPass());
    }
}