Sommaire

Injection d’un service dans un service

Pour injecter un service dans le constructeur d’un service, nous allons le définir en argument dans le fichier config/services.yml. Argument

Prenons l’exemple de notre service : App\Service\MessageGenerator. Nous souhaitons que ce service utilise le service LoggerInterface en autowiring. Nous pouvons lui passer l’identifiant du service en argument.

Nous vous rappelons que vous pouvez retrouver la liste des services et leurs identifiants grâce à l’instruction php/bin/console debug:container (voir section Utilisation des services de ce chapitre)

Nous allons utiliser un identifiant différent de celui par défaut de LoggerInterface. Imaginons que l’on veuille récupérer les messages uniquement dans la console (le terminal).

Dans le fichier config/services.yaml, ajoutons ces lignes :

    App\Service\MessageGenerator: 
        arguments: 
            $logger: ’@monolog.logger.console’

Le @ signifie à Symfony qu’on passe un identifiant de service en argument et pas une chaîne de caractères.

Le paramètre $logger sera injecté automatiquement dans le constructeur du service App\Service\MessageGenerator. Modifions cette classe pour qu’elle puisse utiliser LoggerInterface :

<?php 
namespace App\Service; 
use Psr\Log\LoggerInterface; 
 
class MessageGenerator  ...