Recherche…


Modèle d'injection de dépendance

Imaginez que vous ayez un gestionnaire de classe pour gérer l'envoi des mails (s'appelle MailManager).

Dans ce cas, vous devez enregistrer les messages envoyés. Une bonne solution consiste à transformer la classe MailManager en un service , puis à injecter une classe pour créer des journaux ( Monolog par exemple) dans MailManager en créant un service.

Pour faire ça :

1- Déclarez la future classe MailManager en tant que service (dans services.yml)

services:
    mail.manager.class:
        class:     Vendor/YourBundle/Manager/MailManager

2- Injecter le service existant du logger en utilisant la méthode des argument

services:
    mail.manager.class:
        class:    Project/Bundle/Manager/MailManager
        arguments: ["@logger"]    # inject logger service into constructor

3- Créer une classe MailManager

<?php

namespace Project\Bundle\Manager;

use Symfony\Component\HttpKernel\Log\LoggerInterface;

class MailManager
{
  protected $logger;

  //initialized logger object
  public function __construct(LoggerInterface $logger)
  {
     $this->logger = $logger;
  }

   public function sendMail($parameters)
   {
      //some codes to send mail
      
      //example using logger
      $this->logger->info('Mail sending');
   }
}

4- Appelez MailManager dans un contrôleur par exemple

<?php

class TestController extends Controller
{
    public function indexAction()
    {
        //some codes...

        //call mail manager service
        $mailManager = $this->get('mail.manager.class');
        //call 'sendMail' function from this service
        $mailManager->sendMail($parameters);
        
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow