Ricerca…


Schema dell'iniezione delle dipendenze

Immagina di avere un manager di classe per gestire l'invio di posta (si chiami MailManager).

In questo, devi registrare le mail che vengono inviate. Una buona soluzione è trasformare la classe MailManager in un service e quindi immettere la classe per la creazione di registri ( Monolog per esempio) nel MailManager creando un servizio.

Per fare questo :

1- Dichiara la futura classe MailManager come servizio (in services.yml)

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

2- Iniettare il servizio esistente del logger usando il metodo argument

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

3- Creare una 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- Chiama MailManager in un controller, ad esempio

<?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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow