Как упомянул dbrumann в комментарии, мне нужно было следовать правильному способу введения услуг.
Сначала , мне нужно было добавить службы в config / services.yaml
#config/services.yaml
emailservice:
class: App\Service\EmailService
arguments: ['@swiftmailer.mailer.default', '@twig']
public: true
Второй , мне нужно настроить службу для приема как почтовика, так и ветки для рендеринга шаблона.
#App/Service/EmailService.php
<?php
namespace App\Service;
class EmailService
{
private $from = 'support@*****.com';
private $mailer;
private $templating;
public function __construct(\Swift_Mailer $mailer, \Twig\Environment $templating)
{
$this->mailer = $mailer;
$this->templating = $templating;
}
public function userConfirmation(string $recipient, string $confCode) : bool
{
$message = (new \Swift_Message())
->setSubject('Some sort of string')
->setFrom($this->from)
->setTo($recipient)
->setBody(
$this->templating->render(
'email/UserConfirmation.html.twig',
array('confCode' => $confCode)
),
'text/html'
)
/*
* If you also want to include a plaintext version of the message
->addPart(
$this->renderView(
'emails/UserConfirmation.txt.twig',
array('confCode' => $confCode)
),
'text/plain'
)
*/
;
return $this->mailer->send($message);
}
}
Третий , чтобы вызвать его из контроллера, убедитесь, что ваш контроллер расширяет Контроллер , а не AbstractController ! Решающий шаг !! Вот пример, основанный на параметрах, которые мне нужны в моем сервисе:
public function userConfirmation()
{
$emailService = $this->get('emailservice');
$sent = $emailService->userConfirmation('some@emailaddress.com', '2ndParam');
return new Response('Success') //Or whatever you want to return
}
Надеюсь, это поможет людям. AbstractController не предоставляет вам надлежащий доступ к сервисным контейнерам.