Intereting Posts
Загадочная пустая запись в базу данных Метод ajax serialize () не читает все поля данных формы html как перейти на ту же страницу после входа в PHP Как работает хеш-пароль WordPress? Как добавить пользовательскую кнопку и ее функциональность в Admin Silverstripe? Проблема с чтением файлов размером более 1 ГБ с помощью XMLReader Автоматическая новая строка в библиотеке GD Как связать произвольное количество значений с подготовленным оператором в mysqli? PHP file_exists не работает Почему мой запрос с именованными параметрами возвращает пустой результат? PHP-REGEX: акцентированные буквы соответствуют неактивным, и наоборот. Как достичь этого? Как получить код для проверки правильности комбинации имени пользователя и пароля? Получение данных для нескольких одиночных или справочных без использования оператора выполнить программу c ++ с помощью php-скрипта Куча файлов cookie vs php cookie

Как я могу отправлять электронные письма из класса обслуживания Symfony2?

Я могу с успехом использовать следующий код для отправки писем от контроллера:

$message = \Swift_Message::newInstance() ->setSubject('Hello Email') ->setFrom('send@example.com') ->setTo('recipient@example.com') ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name))) ; $this->get('mailer')->send($message); 

Как мне изменить код, чтобы использовать его из класса сервиса?

У вашего сервиса есть внешняя зависимость, особенно служба почтовой службы. Вы можете либо ввести сам контейнер службы, либо ввести службу почтовой программы.

Если вашему сервису требуется только служба почтовой рассылки, и ничего больше, я бы предложил ввести только почтовую службу.

Вот как вы бы настроили DIC, чтобы внедрить почтовую службу с помощью сеттера:

 <service id="my.service" class="Acme\DemoBundle\Service\Hello"> <call method="setMailer"> <argument type="service" id="mailer" /> </call> </service> 

В своем классе напишите свой сеттер:

 class Hello { protected $mailer; public function setMailer($mailer) { $this->mailer = $mailer; } public function sendEmail() { $message = \Swift_Message::newInstance() ->setSubject('Hello Email') ->setFrom('send@example.com') ->setTo('recipient@example.com') ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name))) ; $this->mailer->send($message); } } 

Примечание. Вы должны будете отобразить свой шаблон в своем контроллере и перейти к этой функции электронной почты, или добавить шаблонный сервис и рендеринг в свою службу.

Это зависит от того, как вы объявили услугу. Если вы передаете ему весь контейнер обслуживания, вам ничего не нужно будет менять, иначе вам понадобится, по крайней мере, почтовая программа и служба шаблонов, переданные ей и вызванные более прямо ( $this->get('service') приведет к смертельному исходу ошибка sinc это зависит от container )

См. Также https://stackoverflow.com/a/12905319/258674