Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在symfony 2中创建邮件服务_Php_Email_Symfony_Ini - Fatal编程技术网

Php 在symfony 2中创建邮件服务

Php 在symfony 2中创建邮件服务,php,email,symfony,ini,Php,Email,Symfony,Ini,我是Symfony的新手,现在我有一个关于配置和发送邮件的问题。 实际上,我正在控制器中配置和发送邮件,但对我来说,最好不要在控制器中配置邮件,而是在.ini文件或其他文件中配置邮件。因此,我认为正确的方法是将其配置为服务,因为这样我可以在类中而不是在代码中配置邮件本身 我创建了一个类,看起来是这样的: class PwMailer{ protected $mailer; public function setMailer($mailer) { $this->mailer = $

我是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:错误:在“…controller”中找不到类“…Mailer”

我的代码是和的混合

如果在类中而不是在控制器中配置邮件的服务容器是正确的方法,并且我的想法是错误的,那么我很高兴得到一个提示。直到现在,我才明白服务容器的配置到底是如何工作的


问候语

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

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

服务:pw_mailer:第二行不应该与第一行对齐。这是一个非常常见的误解。您认为新邮件程序将以某种方式访问容器,但两者完全独立。作为初学者,您需要$mailer=$this->container->get'pw_mailer';我想你也会遇到更多的问题。可能想先在手册中获得示例,然后再进行细化。我尝试从小的方面开始。行$this->mailer->send$message;在类中,实际上会导致错误FatalErrorException:error:对非对象上的成员函数sendmail的调用我是否理解正确,我无法将参数从控制器提供给容器?是否可以在单独的类或ini文件中配置邮件的参数?