現在開発中の 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 と書き換えることで、
商品価格の変更があったときの処理を残したままエラーメッセージを表示させないようにすることも可能です。