Я очень новичок в Symfony, и теперь у меня есть вопрос о настройке и отправке почты.
На самом деле я настраиваю и отправляю почту в контроллере, но для меня было бы лучше настроить почту не в контроллере, а в .ini-файле или чем-то еще. Поэтому я подумал, что правильным способом будет настроить его как службу, потому что так я могу настроить саму почту в классе, а не в коде.
Я создал класс, который выглядит так:
class PwMailer{
protected $mailer;
public function setMailer($mailer)
{
$this->mailer = $mailer;
}
public function sendEmail($email, $password)
{
$message = \Swift_Message::newInstance()
->setSubject('New Password')
->setFrom('[email protected]')
->setTo($email)
->setBody('Your new Password is '.$password)
;
$this->mailer->send($message);
}
}
Значения $ email и $ password должны поступать от контроллера. В моем config-файле app \ config \ config.yml я настроил это:
services:
pw_mailer:
class: Pso\LogBundle\PwMailer
arguments: [sendmail]
Я звоню в сервис от контроллера
$mailer = new Mailer('pw_mailer');
$mailer->send();
Теперь я получил сообщение об ошибке «FatalErrorException: ошибка: класс« … Mailer »не найден в« … controller »
Мой код представляет собой микс из http://symfony.com/doc/current/book/service_container.html а также Как я могу отправлять электронные письма из класса обслуживания Symfony2?
Я был бы рад подсказке, если сервисный контейнер для настройки почты в классе, а не в контроллере, является правильным способом и где моя ошибка в мышлении. До сих пор я не понимал, как именно работает конфигурация сервисного контейнера.
Привет
Ваш сервис имеет внешнюю зависимость, в частности, почтовый сервис. Вы можете либо внедрить сам сервисный контейнер, либо внедрить почтовую службу. Если для вашей службы требуется только служба почтовой программы и ничего больше, я бы предложил внедрить только службу почтовой программы. Вот как вы можете настроить DIC для внедрения службы почтовой программы с помощью установщика:
services:
pw_mailer:
class: Pso\LogBundle\PwMailer
arguments: [mailer]
Других решений пока нет …