You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel通知模板变量传递问题:无法将取消订阅URL传入message.blade.php

解决Laravel邮件模板传递unsubscribe_url变量到message.blade.php的问题

问题场景

通过php artisan vendor:publish --tag=laravel-notifications发布邮件模板文件后,已成功在消息布局中添加powered-by内容,但无法将unsubscribe_url变量传递到已发布的message.blade.php模板中,导致取消订阅链接无法正常显示。

当前代码

  1. Notification类的toMail()方法:
return (new MailMessage())
    ->markdown('emails.reminder', ['unsubscribe_url' => 'custom_url_here']);
  1. 修改后的message.blade.php:
<x-mail::layout>

{{-- Body --}}
{{ $slot }}

{{-- Subcopy --}}
@isset($subcopy)
<x-slot:subcopy>
    <x-mail::subcopy>
        {{ $subcopy }}
    </x-mail::subcopy>
</x-slot:subcopy>
@endisset

{{-- Footer --}}
<x-slot:footer>

    <x-mail::footer>
        <a href="{{ $unsubscribe_url }}">Unsubscribe here.</a>
    </x-mail::footer>

    <x-mail::powered-by />

    <x-mail::footer>
        © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
    </x-mail::footer>
</x-slot:footer>
</x-mail::layout>
  1. 尝试过的无效写法(在emails.reminder中):
@extends('vendor.mail.html.message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@yield('vendor.mail.html.message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@include('vendor.mail.html.message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('x-mail::message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('x-slot:message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('x-mail::footer',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('x-slot:footer',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('mail::html.message',[
    'unsubscribe_url' => $unsubscribe_url,
])

@extends('mail::text.message',[
    'unsubscribe_url' => $unsubscribe_url,
])

解决方案

方法1:用MailMessage的with()方法传递变量

Laravel的MailMessage支持通过with()方法直接将变量传递到底层布局模板,无需中间视图中转:

return (new MailMessage())
    ->markdown('emails.reminder')
    ->with(['unsubscribe_url' => 'custom_url_here']);

修改后$unsubscribe_url会直接在message.blade.php中可用。

方法2:在markdown视图中通过组件传递变量

如果需要通过emails.reminder视图传递变量,需使用@component指令调用邮件布局并传入变量:

@component('mail::message', ['unsubscribe_url' => $unsubscribe_url])
    {{-- 邮件主体内容 --}}
    这是提醒邮件的核心内容...
@endcomponent

mail::message对应你发布的message.blade.php模板,通过组件的第二个参数传递变量后,布局模板就能接收到$unsubscribe_url。

注意事项

  • 确认修改的是发布后的模板文件,路径通常为resources/views/vendor/mail/html/message.blade.php
  • 若使用文本邮件模板,需同步修改resources/views/vendor/mail/text/message.blade.php

内容的提问来源于stack exchange,提问作者Wanjia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:05:30