如何在 Symfony 4 中使用实例正确调用函数
How to properly call a function with instance in Symfony 4
我正在尝试在 Symfony 4 中使用 SMTP 发送电子邮件,并且根据 docs.
我具有以下功能
public function send_smtp(\Swift_Mailer $mailer)
{
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$mailer->send($message);
}
但是,我想从另一个函数调用此函数,例如
$this->send_smtp();
但它抱怨 'No parameters are passed' 和
$this->send_smtp(\Swift_Mailer);
也给出错误信息
Undefined constant 'Swift_Mailer'
可能是什么问题,如何解决?
有几种可能的解决方案。您可以在您的操作中添加带有类型提示的参数,然后使用它来调用您的函数:
/**
* @Route("/something")
*/
public function something(\Swift_Mailer $mailer)
{
$this->send_smtp($mailer);
}
或者您可以在 send_smtp 函数中从容器中检索服务:
public function send_smtp()
{
$mailer = $this->get('mailer');
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$mailer->send($message);
}
创建服务,例如
namespace App\Service\Mailer;
class Mailer
{
private $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function send_smtp()
{
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$this->mailer->send($message);
}
}
现在你可以通过 __construct
:
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
public function someAction()
{
$this->mailer->send_smtp()
}
或者您可以通过方法或 属性 注入它。您可以在此处阅读有关注入的更多信息:https://symfony.com/doc/current/components/dependency_injection.html
P.S。我不建议你使用容器的方法 get
因为这个方法只适用于 public 服务,但在 Symfony 4 中服务默认是私有的。
我正在尝试在 Symfony 4 中使用 SMTP 发送电子邮件,并且根据 docs.
我具有以下功能public function send_smtp(\Swift_Mailer $mailer)
{
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$mailer->send($message);
}
但是,我想从另一个函数调用此函数,例如
$this->send_smtp();
但它抱怨 'No parameters are passed' 和
$this->send_smtp(\Swift_Mailer);
也给出错误信息
Undefined constant 'Swift_Mailer'
可能是什么问题,如何解决?
有几种可能的解决方案。您可以在您的操作中添加带有类型提示的参数,然后使用它来调用您的函数:
/**
* @Route("/something")
*/
public function something(\Swift_Mailer $mailer)
{
$this->send_smtp($mailer);
}
或者您可以在 send_smtp 函数中从容器中检索服务:
public function send_smtp()
{
$mailer = $this->get('mailer');
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$mailer->send($message);
}
创建服务,例如
namespace App\Service\Mailer;
class Mailer
{
private $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function send_smtp()
{
$message = (new \Swift_Message('Hello Email'))
->setFrom('send@example.com')
->setTo('MyEmail@gmail.com')
->setBody('test email content');
$this->mailer->send($message);
}
}
现在你可以通过 __construct
:
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
public function someAction()
{
$this->mailer->send_smtp()
}
或者您可以通过方法或 属性 注入它。您可以在此处阅读有关注入的更多信息:https://symfony.com/doc/current/components/dependency_injection.html
P.S。我不建议你使用容器的方法 get
因为这个方法只适用于 public 服务,但在 Symfony 4 中服务默认是私有的。