Aller au contenu principal

Identifier le type injectable

Dans le container​

A l'aide de la console applicative (php bin/console), on peut demander au container de Symfony de nous afficher les services disponibles concernant le mot-clé "Mailer" :

php bin/console debug:container Mailer

Dans la liste affichée, on retrouve plein de services incluant le mot-clé. Dans un premier temps, affichons le détail du service ayant pour nom "mailer" en tapant son numéro.

On constate que la classe concernée se trouve bien dans le composant symfony/mailer, ce serait donc un service qu'on souhaiterait injecter dans notre contrôleur.

Par ailleurs, son identifiant de service est mailer.mailer.

Mais ce service est indiqué comme n'étant pas autowiré. On ne va donc pas l'injecter directement en tant que type-hint dans notre contrôleur.

Dans les types autowirés​

Pour savoir quel type on peut type-hinter, on peut également demander à la console applicative quel type est disponible, avec le mot-clé "mailer" et la commande suivante :

php bin/console debug:autowiring Mailer

Dans la liste affichée, on trouve l'élément suivant :

Autowirable Types
=================

The following classes & interfaces can be used as type-hints when autowiring:
(only showing classes/interfaces matching Mailer)

Interface for mailers able to send emails synchronous and/or asynchronous.
Symfony\Component\Mailer\MailerInterface (mailer.mailer)

Le type Symfony\Component\Mailer\MailerInterface est indiqué comme le type à type-hinter pour envoyer des emails. Par ailleurs, on voit que le service associé est précisément mailer.mailer, le service que nous avons identifié juste avant.

Type-hint​

Une fois que le type a été identifié, on peut alors l'utiliser dans le contrôleur :

public function register(
Request $request,
EntityManagerInterface $em,
MailerInterface $mailer
): Response {
//...
}

Pour construire un email et l'envoyer, on peut ensuite se référer à la documentation du composant mailer.

Pour construire des emails avec une mise en forme plus avancée (templates Twig par exemple), consulter cette section de la documentation.