イベントサブスクライバーを置き換えたいのですが。既存のイベントサブスクライバーの前後で実行される代わりに、別の既存のイベントサブスクライバーを置き換えるEventSubscriberInterfaceを実装するクラスを作成する方法はありますか?.
これを行うには、ServiceProvider
クラスを作成します。
path_subscriber
サービスをオーバーライドするサービスプロバイダークラスの例。
namespace Drupal\MY_MODULE;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;
// @note: You only need Reference, if you want to change service arguments.
use Symfony\Component\DependencyInjection\Reference;
/**
* Modifies the path_subscriber service.
*/
class MyModuleServiceProvider extends ServiceProviderBase {
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
// Overrides language_manager class to test domain language negotiation.
// Adds entity_type.manager service as an additional argument.
$definition = $container->getDefinition('path_subscriber');
$definition->setClass('Drupal\MY_MODULE\MyCustomPathSubscriber')
// Custom arguments.
->addArgument(new Reference('some_argument'));
}
}
別の解決策は、次のようにMY_MODULE.services.yml
のサービスをオーバーライドすることです。
path_subscriber:
class: Drupal\MY_MODULE\MyCustomPathSubscriber
arguments: [# The arguments]