Laravel 邮件的可选参数

Ped*_*sel 3 php email laravel laravel-5

为 Laravel 的邮件功能创建可选的消息部分?

例如添加附件或密件抄送。

Mail::send('emails.welcome', $data, function($message)
{
    $message->from('us@example.com', 'Laravel');

    $message->to('foo@example.com')->cc('bar@example.com');

    $message->attach($pathToFile); <========= OPTIONAL =========
});
Run Code Online (Sandbox Code Playgroud)

我真的想避免像这样丑陋的代码

if (isset($data['attachment'])) {
    // Attachment
    Mail::queue('emails.raw', ['content' => $content], function($message) use ($data) {
        $message
            ->subject($data['subject'])
            ->attach($data['attachment'])
            ->to($data['email'])
            ->bcc($data['bcc']);
        });
}
else{
    // No attachment
    Mail::queue('emails.raw', ['content' => $content], function($message) use ($data) {
        $message
            ->subject($data['subject'])
            ->to($data['email'])
            ->bcc($data['bcc']);
        });
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*ten 5

您可以将 if 条件移动到闭包中:

Mail::queue('emails.raw', ['content' => $content], function($message) use ($data) {
    $message
        ->subject($data['subject'])
        ->to($data['email'])
        ->bcc($data['bcc']);

    if (isset($data['attachment'])) {
        $message->attach($data['attachment']);
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,方法链只是语法糖。以上相当于:

Mail::queue('emails.raw', ['content' => $content], function($message) use ($data) {
    $message->subject($data['subject']);
    $message->to($data['email']);
    $message->bcc($data['bcc']);

    if (isset($data['attachment'])) {
        $message->attach($data['attachment']);
    }
});
Run Code Online (Sandbox Code Playgroud)

所以随心所欲地写吧。