Je pense qu'il faut que tu recommences la formation Symfony pour que tout soit clair dans ta tête :)
Le controller sert a orchestrer les différents éléments. Aller chercher les données dans la base de données, et ensuite les rendre avec la view.
Les fonctions annexe du genre l'envoie d'un mail au client, ou tout autre fonction de traitement ne doivent pas se retrouver dans ton controller.
C'est la qu'intervient les services qui sont en faite des class PHP que tu peux appeler dans ton controller.
Par exemple dans ton cas il faudait faire un truc du genre :
class UserController extends AbstractController
{
/**
** @ORM\Route('/welcome')
**/
public function welcome(MailerService $mailer){
// Tu récupères l'utilisateur courant (qui vient de se connecter)
$currentUser = $this->getUser();
$mailer->sendWelcomeMessage($currentUser);
return $this->render('welcome.html.twig');
}
}
Et ensuite tu défini ton service Mailer que tu pourras réutiliser un peux partout dans tes controller.
class MailerService
{
// Ici tu peux spécifier le type que tu attends, j'ai mis user mais je pense qu'il vaut mieux mettre UserInterface de mémoire
public function sendWelcomeMessage(User $user){
// Ici tu met ta fonction que tu as créer plus haut
}
}
Le soucis que tu aura de faire cela c'est qu'en effet dans le service tu n'as pas accèdes a certaines fonctions du controller comme le render de twig.
Mais tu peux l'importer dans ton service pour t'en servir de cette manière
use Twig\Environment;
class MailerService
{
// Ici tu charge le twig environment pour pouvoir faire tes renders.
public function __contruct(Environment $twig){
$this->twig = $twig;
}
// Ici tu peux spécifier le type que tu attends, j'ai mis user mais je pense qu'il vaut mieux mettre UserInterface de mémoire
public function sendWelcomeMessage(User $user){
// Ici tu met ta fonction que tu as créer plus haut
// Au lieu de faire $this->renderView() tu fais à la place $this->twig->render('welcome.html.twig')
}
}
Mais vraiment essaye de relire le cours c'est une notion qui est un peu compliqué a appréhender mais une fois compris tout te paraitra logique ;)