在symfony 2中创建邮件服务

时间:2014-11-15 19:56:56

标签: php email symfony ini

我对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('xxx@nobody.com')
        ->setTo($email)
        ->setBody('Your new Password is '.$password)
    ;
    $this->mailer->send($message);
}

}

值$ email和$ password应来自控制器。在我的配置文件app \ config \ config.yml中我配置了它:

services:
  pw_mailer:
    class:     Pso\LogBundle\PwMailer
    arguments: [sendmail] 

我从控制器调用服务

$mailer = new Mailer('pw_mailer');
$mailer->send();

现在我收到了错误" FatalErrorException:错误:Class' ... Mailer'在' ...控制器'

中找不到

我的代码是来自http://symfony.com/doc/current/book/service_container.htmlHow can I send emails from a Symfony2 service class?

的混音

如果用于在类中而不是在控制器中配置邮件的服务容器是正确的方式以及我的错误思考,我会很高兴提示。到目前为止,我还没有解释服务容器的配置是如何工作的。

问候

1 个答案:

答案 0 :(得分:0)

您的服务具有外部依赖性,尤其是邮件服务。您可以注入服务容器本身,也可以注入邮件服务。如果您的服务只需要邮件服务而没有别的,我建议只注入邮件服务。以下是如何配置DIC以使用setter注入邮件服务:

services:
    pw_mailer:
        class:     Pso\LogBundle\PwMailer
        arguments: [mailer]