Laravel 9邮件通知Blade组件未正常渲染问题求助
确认通知类的视图调用方式
检查你的通知类里是否使用了markdown()方法返回邮件视图——Blade邮件组件是markdown邮件专属的,用view()方法会直接输出组件标签。示例:// 正确用法 return $this->markdown('notifications.invoice-paid'); // 错误用法(无法渲染组件) return $this->view('notifications.invoice-paid');核对组件视图路径与完整性
Laravel 9.35+ 微调了邮件组件的加载逻辑,确保你发布的通知视图在resources/views/vendor/notifications目录下,且message.blade.php、button.blade.php等基础组件文件存在且未被篡改。如果是自定义组件,要确认命名空间注册正确,或者在视图里用完整引用路径(比如<x-notifications::message>)。清除全量缓存
仅清除视图缓存可能不够,执行以下命令清空所有缓存,避免旧配置干扰:php artisan cache:clear php artisan config:clear php artisan route:clear php artisan optimize:clear对比全新项目的基础视图文件
把全新Laravel 9项目中vendor/laravel/framework/src/Illuminate/Notifications/resources/views下的文件,和你项目resources/views/vendor/notifications里的文件做对比,确保组件的Blade语法、结构没有被错误修改。比如默认的message.blade.php应该是:@component('mail::message') {{ $slot }} @endcomponent确保依赖完整更新
执行composer update laravel/framework --with-dependencies,拉取所有关联依赖的对应版本,避免依赖版本不一致导致的逻辑冲突。同时检查composer.lock里laravel/framework的版本确实是9.35及以上。用极简通知测试排查
创建一个只包含基础组件的测试通知,排除自定义视图代码的干扰:
测试通知类:class TestNotification extends Notification { public function via($notifiable) { return ['mail']; } public function toMail($notifiable) { return $this->markdown('test-notification'); } }对应的
test-notification.blade.php:@component('mail::message') <:message> 这是测试消息 </:message> <:button url="https://example.com"> 测试按钮 </:button> @endcomponent如果测试通知能正常渲染,说明问题出在原有视图的自定义代码中,逐步排查即可。
内容的提问来源于stack exchange,提问作者Lars Nyström

