Suche…


Abhängigkeit Einspritzmuster

Stellen Sie sich vor, Sie verfügen über einen Klassenmanager, der das Versenden von E-Mails verwaltet (als MailManager bezeichnet).

In diesem Fall müssen Sie gesendete Mails protokollieren. Eine gute Lösung ist, die MailManager-Klasse in einen service umzuwandeln und dann eine Klasse zum Erstellen von Protokollen (z. B. Monolog ) in den MailManager einzubringen, der einen Dienst erstellt.

Um dies zu tun :

1- Zukünftige MailManager-Klasse als Dienst deklarieren (in services.yml)

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

2- Vorhandenen Service des Loggers mit der argument einspritzen

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

3- Erstellen Sie die MailManager-Klasse

<?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- Rufen Sie MailManager beispielsweise in einem Controller an

<?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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow