Je souhaite remplacer un abonné à l'événement. Existe-t-il un moyen d'écrire ma classe implémentant EventSubscriberInterface qui remplacerait un autre abonné d'événement existant au lieu d'être exécuté plus tôt ou plus tard que celui existant.
Vous pouvez le faire en créant une classe ServiceProvider
.
Exemple de classe de fournisseur de services pour remplacer le path_subscriber
un service.
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'));
}
}
Une autre solution consiste à remplacer le service dans MY_MODULE.services.yml
, comme ça:
path_subscriber:
class: Drupal\MY_MODULE\MyCustomPathSubscriber
arguments: [# The arguments]