请问一下上一教程中 Auth::id () 到这里为何不需要修改,依旧能使用?

上一节中通知用户我们用的是,

    public function notify($instance)
    {
        // 如果要通知的人是当前用户,就不必通知了!
        if ($this->id == Auth::id()) {
            return;
        }
        $this->increment('notification_count');
        $this->laravelNotify($instance);
    }

这一节用api构建,不是应该通过Auth::guard('api')->id(),获取登录用户ID吗?
但是我试了,用Auth:id()也可以避免通知自己。

但是在transformer转换其中,我又必须用Auth::guard('api')才能获取到用户实例。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8
liyu001989

因为之前的逻辑限制了

    public function created(Reply $reply)
    {
        $topic = $reply->topic;
        $topic->increment('reply_count', 1);

        // 如果评论的作者不是话题的作者,才需要通知
        if ( ! $reply->user->isAuthorOf($topic)) {
            $topic->user->notify(new TopicReplied($reply));
        }
    }

这里的逻辑确实有点问题,我想一想,修改了回复你

6年前 评论

这个是:“但是在transformer转换其中,我又必须用Auth::guard('api')才能获取到用户实例。”,我在 transformer 中使用 \Auth::user() 可以得到用户实例呀?

5年前 评论
liyu001989

@wangjiu 问题是:

  1. 模型中应该尽量避免 Auth::id 这样的操作,模型中的方法不应该关心当前有没有用户登录,有可能是 cli 状态下使用。需要对比的用户可以从外部传进来,或者就在外部判断。这里不会出现 bug 是因为上层已经判断了。
  2. \Auth::user() 确实也能拿到,因为 Dingo 处理了一些处理。
5年前 评论

@liyu001989 老师,我觉得在模型中写判断也没有错啊,这样在外面就不需要再做判断了,如果在cli状态下使用,Auth::id()是否应该为null,如果为null的话,通知回复的主题的作者也没错呀。

5年前 评论
liyu001989

@hustnzj 问题是这样做好不好,而不是现在的逻辑不会出现问题。

我的观点就是,既然是一个封装的方法,就让这个方法更加通用一点,当前登录用户可以当一个参数传进去,$exceptUser之类的,这样不好吗。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!