Laravel markdown 邮件中的动态 header 和页脚

Dynamic header and footer in Laravel markdown mail

根据文档,我使用 markdown mailables 创建了自己的邮件模板:https://laravel.com/docs/9.x/mail#generating-markdown-mailables

关键是我需要动态地自定义 header 和页脚中的信息(在每种情况下都会有所不同)。我在 toMail 函数中传递的信息仅在我的自定义模板范围内可用 neworder.blade.php:

public function toMail($notifiable){
    $from = 'no-reply.'.$this->subdomain.'@'.env('APP_DOMAIN');
    return (new MailMessage)
    ->from($from)
    ->markdown('emails.neworder',
        [
            'name'=>$this->name,
            'order'=> $this->order,
            'emailbody'=> $this->emailbody,
            'headertitle' => $this->headertitle,
            'footertext' => $this->footertext
        ]
    );
}

按照相同的文档,我导出了 Markdown 邮件组件以使用此命令自定义它们:

php artisan vendor:publish --tag=laravel-mail

从这里我可以自定义 /vendor/mail/html/themes/header.blade.php 等文件,其中的修改会有效影响 header。我想不通的是 如何传递我可以在这些文件范围内使用的变量,就像在 /views/email/neworder.blade.php 中一样 我需要在相应的部分中包含 headertitlefootertext 的值。

没有找到更好的解决方案,我最终被迫使用会话变量,以便我可以在页眉和页脚模板中使用它们。

  1. 设置会话变量 你想在 Http/Notifications/yourNotificationTemplate 中使用 footer/header。php:

     public function toMail($notifiable){
         session(['headertitle' => $this->headertitle]);
         session(['footertext' => $this->footertext]);
         $from = 'no-reply.'.$this->subdomain.'@'.env('APP_DOMAIN');
         return (new MailMessage)
         ->from($from)
         ->markdown('emails.neworder',
             [
                 'name'=>$this->name,
                 'order'=> $this->order,
                 'emailbody'=> $this->emailbody,
             ]
         );
     }
    
  2. 然后您就可以在您的模板中的任何地方使用它。 F.E 在 /views/vendor/mail/thml/header.blade.php:

@php ($headertext = session('headertitle'))
<tr>
<td class="header">
@if (null!==(session('headertext')))
<h1>{{$headertext}}</h1>
@else
{{ $slot }}
@endif
</td>
</tr>