【问题标题】:creating a mailer service in symfony 2在 symfony 2 中创建邮件服务
【发布时间】:2014-11-15 19:56:55
【问题描述】:

我是 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: Error: Class '...Mailer' not found in '...controller'

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

如果一个用于在类中而不是在控制器中配置邮件的服务容器是正确的方式以及我的思考错误所在,我会很高兴得到提示。直到现在我还没有弄明白服务容器的配置究竟是如何工作的。

问候

【问题讨论】:

  • services: pw_mailer: 第二行不应与第一行对齐。
  • 这是一个很常见的误解。你认为新的 Mailer 会以某种方式访问​​容器,但两者是完全独立的。作为初学者,您需要 $mailer = $this->container->get('pw_mailer');我怀疑您还会遇到更多问题。可能希望先让手册中的示例工作,然后再完善。
  • 我尝试从小处着手。行 $this->mailer->send($message);在类中实际上会导致错误“FatalErrorException:错误:在非对象中调用成员函数 sendmail()”我是否正确,我不能将参数从控制器提供给容器?是否有可能在单独的类或ini文件中配置邮件的参数?

标签: php email symfony ini


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多