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