我正在尝试通过我的Laravel 5.1项目中的Mandrill发送自动邮件。它正在工作,但我正在我的AuthController中设置我的Mandrill呼叫,现在我想要一个类App \ Marketing,我将发送所有发送电子邮件的功能。因此,在动作发生后我的控制器中我可以用一行代码调用该函数,但这一行给我带来麻烦。
我的App \ Marketing类现在看起来像这样
class Marketing{
private $mandrill;
/**
* Via construct injection
*
*/
public function __construct(Mail $mandrill)
{
$this->mandrill = $mandrill;
}
public function sendRegistermail()
{
// In template content you write your dynamic content if you use <mc:edit> tags.
$template_content = [];
$message = array(
'subject' => 'Welkom bij SP*RK! - Jouw accountgegevens',
'from_email' => 'noreply@spark.com',
'from_name' => 'SP*RK',
'to' => array(
array(
'email' => $request->input('email'),
'name' => $request->input('name'),
'type' => 'to'
)
),
'merge_vars' => array(
array(
'rcpt' => $request->input('email'),
'vars' => array(
array(
'name' => 'NAME',
'content' => $request->input('name')
),
array(
'name' => 'EMAIL',
'content' => $request->input('email')
)
)
)
)
);
//email validation
if (str_contains($request['email'], "@kuleuven.be")) {
MandrillMail::messages()->sendTemplate('registration-mail', $template_content, $message);
} else {
MandrillMail::messages()->sendTemplate('registration-mail-notactive', $template_content, $message);
}
}
// ----- OR -------
/**
* Via method injection
*
*/
public function sendMail(Mail $mandrill, $data)
{
$mandrill->messages()->sendTemplate($data)
}
// ----- OR -------
/**
* Via the Facade
*
*/
public function sendMailByFacade($data)
{
\MandrillMail::messages()->sendTemplate($data);
}
}
这是我在postRegister函数中注册后尝试调用该函数的方法:
sendRegistermail();
return redirect($this->redirectPath());
答案 0 :(得分:1)
sendRegistermail
是Marketing
类的一种方法,您应该在该对象的实例上调用它
因此,首先,您必须在控制器中创建一个Marketing
对象实例。这是一个很好的方法,它通过在构造函数中注入依赖项来实现,如下所示:
//your controller class
class Controller
{
protected $marketing;
//Your controller's constructor
public function __construct(Marketing $marketing)
{
$this->marketing = $marketing;
}
}
或者您可以使用代码中提供的其他方法之一来注入实例。
拥有Marketing
类的实例后,您只需要在该实例上调用sendRegistermail
方法。在您的控制器方法中:
//call the method on the marketing instance
$this->marketing->sendRegistermail();