此节复写 trait 中的 notify 方法,会导致框架自带的「重新发送邮件」的功能失效,建议在 user model 类中新增一个 topicNofity 方法单独处理即可。

此节重写了 \Illuminate\Notifications\RoutesNotifications::notify,导致如果是发送给自己的通知,就不会发送 $this->id == Auth::id(),但是激活邮件是需要发送给自己的。所以,最好是不要重写trait中的notify方法,而改为在user model类中新增一个topicNotify()的方法,代码如下:

  • app/Models/User.php

    //    public function notify($instance)
    //    {
    //        // 如果要通知的人是当前用户,就不必通知了!
    //        if ($this->id == Auth::id()) {
    //            return;
    //        }
    //        $this->increment('notification_count');
    //        $this->laravelNotify($instance);
    //    }
    
    public function topicNotify($instance)
    {
        // 如果要通知的人是当前用户,就不必通知了!
        if ($this->id == Auth::id()) {
            return;
        }
        $this->increment('notification_count');
        $this->notify($instance);
    }
  • app/Observers/ReplyObserver.php
    public function created(Reply $reply)
    {
        $topic = $reply->topic;
        $reply->topic->increment('reply_count', 1);
        // 通知作者话题被回复了
        $topic->user->topicNotify(new TopicReplied($reply));
    }
  • 测试「重新发送邮件」和「消息通知」的功能,成功!
本帖已被设为精华帖!
本帖由系统于 10个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

找了好久的问题

1年前 评论

5.7版本中似乎有了更好的解法。

1年前 评论

這個問題我也找了好久XD

1年前 评论

很有用哦,点赞!!

5个月前 评论

对的,这里重写notify并不好,重新写一个通知方法里调用notify()才好

1个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!