it-swarm.com.de

Ist es möglich, einen Ereignisteilnehmer zu überschreiben / zu ersetzen?

Ich möchte einen Event-Abonnenten ersetzen. Gibt es eine Möglichkeit, meine Klasse so zu schreiben, dass EventSubscriberInterface implementiert wird, das einen anderen vorhandenen Ereignisabonnenten ersetzt, anstatt früher oder später als der vorhandene ausgeführt zu werden?.

2
pv1

Sie können dies tun, indem Sie eine ServiceProvider -Klasse erstellen.

Beispiel einer Dienstanbieterklasse zum Überschreiben des Dienstes 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'));
  }
}

Eine andere Lösung besteht darin, den Dienst in MY_MODULE.services.yml So zu überschreiben:

path_subscriber:
  class: Drupal\MY_MODULE\MyCustomPathSubscriber
  arguments: [# The arguments]
2
user72672