Buscar..


Patrón de inyección de dependencia

Imagina que tienes un administrador de clase para administrar el envío de correos (se llamará MailManager).

En esto, tienes que registrar los correos que se envían. Una buena solución es transformar la clase MailManager en un service y luego inyectar la clase para crear registros ( Monolog por ejemplo) en el MailManager creando un servicio.

Para hacer esto :

1- Declarar la futura clase de MailManager como servicio (en services.yml)

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

2- Inyectar el servicio existente logger utilizando el método de argument

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

3- Crear la clase 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- Llamar a MailManager en un controlador, por ejemplo.

<?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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow