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

Laravel 9邮件通知Blade组件未正常渲染问题求助

Laravel 9.35+ 邮件通知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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:39:33