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

此节重写了 \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));
    }
  • 测试「重新发送邮件」和「消息通知」的功能,成功!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 3
天上白玉京

找了好久的问题

1个月前

good!:smile:

2周前

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

1周前

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