我创建了一个用于发送电子邮件的Laravel作业,我有多个继承自Mailable
的类。
我的工作班:
class SendMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $emailObject;
public function __construct($emailObject)
{
$this->emailObject = $emailObject;
}
public function handle()
{
\Mail::to($this->emailObject->user->email)->queue($this->emailObject);
}
}
我执行以下操作:
$this->dispatch(new SendMail(new Profile($user)));
或
$this->dispatch(new SendMail(new Newsletter($user)));
我想创建一个对象或模式,这将允许我在我的工作中创建一个带有对象的constructor
。像这样:
class SendMail{
public function __construct(CommonMailObject $emailObject)
{
$this->emailObject = $emailObject;
}
}
例如。个人资料类:
class Profile extends Mailable
{
use Queueable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function build()
{
return $this->from('', '')
->subject('')
->view(EmailType::PROFILE);
}
}
答案 0 :(得分:1)
您应该声明您的SendMail
课程取决于Mailable
对象。
E.g:
class SendMail{
public function __construct(Mailable $mailable)
{
$this->emailObject = $mailable;
}
}
这样你就可以做到这两点:
$this->dispatch(new SendMail(new Profile($user)));
和
$this->dispatch(new SendMail(new Newsletter($user)));
在Mailable课程中,大多数属性都是公开的。要获取地址,您需要获取to
属性,这是一个数组(因为它可以处理多个电子邮件地址)。
所以你只需要访问:
$this->emailObject->to
Haven未对其进行测试,但可能是:
\Mail::to($this->emailObject->to)->queue($this->emailObject);
应该有用。
我会把微调留给你。