Laravel Mailables 作业,通用对象

Laravel job for Mailables, common object

我创建了一个用于发送电子邮件的 Laravel 作业,并且我有多个 class 继承自 Mailable

我的工作class:

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:

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);
    }
}

您应该声明您的 SendMail class 依赖于 Mailable 对象。

例如:

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 class 中大多数属性是 public。要获取地址,您需要获取 to 属性,这是一个数组(因为它可以处理多个电子邮件地址)。

所以您只需访问:

$this->emailObject->to

没有测试过,但是可能:

\Mail::to($this->emailObject->to)->queue($this->emailObject);

应该可以。

我会把 fine-tuning 留给你。