Mailables的Laravel工作,共同对象

时间:2018-03-25 10:57:06

标签: php laravel oop laravel-5.5

我创建了一个用于发送电子邮件的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);
    }
}

1 个答案:

答案 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);

应该有用。

我会把微调留给你。