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模板中,导致取消订阅链接无法正常显示。
当前代码
- Notification类的
toMail()方法:
return (new MailMessage()) ->markdown('emails.reminder', ['unsubscribe_url' => 'custom_url_here']);
- 修改后的
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>
- 尝试过的无效写法(在
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
相关产品推荐
相关产品推荐

