L'injection de dépendance est ajoutée au noyau, mais il n'y a aucune documentation pour dire comment le développeur peut modifier les services par défaut. Par exemple, je voudrais changer la classe cache.bootstrap en APC Caching.
L'injection de dépendance est ajoutée au noyau, mais il n'y a aucune documentation pour dire comment le développeur peut modifier les services par défaut. Par exemple, je voudrais changer la classe cache.bootstrap en APC Caching.
Réponses:
Vous pouvez consulter LanguageTestServiceProvider pour voir comment les modifications sont effectuées. Ou je peux offrir ma classe:
<?php
namespace Drupal\mongodb;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
use Drupal\Core\DependencyInjection\ServiceProviderInterface;
use Drupal\Core\DependencyInjection\ContainerBuilder;
/**
* MongoDB service provider. Registers Mongo-related services.
*/
class MongodbServiceProvider implements ServiceProviderInterface, ServiceModifierInterface {
/**
* {@inheritdoc}
*/
public function register(ContainerBuilder $container) {
}
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
foreach ($container->findTaggedServiceIds('mongodb.override') as $id => $attribute) {
$container->setDefinition(substr($id, 8), $container->getDefinition($id));
}
}
}
Fondamentalement, si alter
vous devez utiliser la getDefinition
méthode, faites quelque chose avec la définition , puis utilisez la setDefinition
méthode pour la remettre.
puis voici les parties pertinentes de mongodb.services.yml:
services:
mongodb.flood:
class: Drupal\mongodb\Flood\MongoDBBackend
arguments: ['@mongo', '@request']
tags:
- { name: mongodb.override }
setDefintion()
si vous l'avez utilisé getDefinition()
- vous pouvez simplement mettre à jour la définition.