EC-CUBE 4.3 の purchaseflow.yaml に登録されているプロセッサーを削除する方法

現在開発中の EC-CUBE 4.3 の purchaseflow.yaml に登録されているプロセッサーを purchaseflow.yaml をいじらずに削除する方法です。

Customize ディレクトリで実装する方法を紹介したかったのですが、Customize ディレクトリ内では Symfony Bundle が登録できないのでプラグインを作ることにしました。

こちら がマージされたら Customize ディレクトリでも可能になります。

プラグインの雛形を生成

最初にプラグインの雛形を生成してください。

プラグインコードは CustomizeBundle とします。

bin/console eccube:plugin:generate

EC-CUBE に登録されている各サービスにアクセスするため Compiler Pass を作成

EC-CUBE に登録されている各サービスにアクセスするため CustomizePass というクラス名で Compiler Pass を作成します。

今回は商品価格の変更を検知する PriceChangeValidator を削除する処理を実装します。

本来、削除しちゃいけない大事なプロセッサーなんですけどね。

<?php

namespace Plugin\CustomizeBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class CustomizePass implements CompilerPassInterface
{

public function process(ContainerBuilder $container)
{
// PriceChangeValidator が登録されていたら削除
if ($container->hasDefinition('eccube.purchase.flow.item.validator.price.change.validator')) {
$container->removeDefinition('eccube.purchase.flow.item.validator.price.change.validator');
}
}
}

CustomizePass を登録するための Bundle を作成

CustomizePass を登録するために CustomizeBundle というクラス名で Bundle を作成します。

<?php

namespace Plugin\CustomizeBundle\Bundle;

use Plugin\CustomizeBundle\DependencyInjection\Compiler\CustomizePass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;

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

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

最後に CustomizeBundle を EC-CUBE に登録

最後に CustomizeBundle を EC-CUBE に登録します。

設置場所は以下のとおりです。

CustomizeBundle/Resource/config/bundles.php

<?php

return [
\Plugin\CustomizeBundle\Bundle\CustomizeBundle::class => ['all' => true],
];

以上で完成です。

これで商品価格の変更検知がされなくなります。

ちなみに独自の PriceChangeValidator を用意して EC-CUBE 本体の PriceChangeValidator と書き換えることで、

商品価格の変更があったときの処理を残したままエラーメッセージを表示させないようにすることも可能です。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください