本节加载子视图哪里,似乎少了一个Auth::user()的传入

教程中的show.blade.php

本节加载子视图哪里,似乎少了一个Auth::user()的传入

访问用户信息 host/users/3 会提示Use Model类的isFollowing方法未定义,无论id是多少都是一样的

本节加载子视图哪里,似乎少了一个Auth::user()的传入

解决办法
传递要给Auth::user()过去就好了

本节加载子视图哪里,似乎少了一个Auth::user()的传入

本节加载子视图哪里,似乎少了一个Auth::user()的传入

这里面的子视图有点局部变量的味道。
引入的子视图传递过去的话,似乎就无法捕捉这种认证过的user信息

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 12

同学你好
最近新人好像多起来了:smile:
这个地方是不需要传参 $user 的,因为 Laravel 的视图之间是可以继承共享变量的,如果子视图没有 $user,代表引用子视图的父视图也没有 $user,你可以在 show.blade.php 打印一下 $user,看看是否能正常访问。

2年前 评论

感谢你的意见。但是我核实 了一下教程,发现教程上这一小结_follow_form.blade.php 并没有写继承,而是在show.blade.php里面直接引入的这个文件。下面是教程上的截图 file

file

2年前 评论
MArtian 2年前
MArtian 2年前

下面的截图就是 show.blade.php 我的代码

file

下面是我 _follow_form.blade.php 的代码

file


在上图 show.blade.php 的第17行,教程上的代码如下

@include('users._follow_form')

当我按照教程上的代码访问的时候,提示错误信息 file

我也赞同你的说法,应该是在子视图里面可以访问到Auth::user() 这个模型类的。但是他的确报错了。

然后我查询我第一次刷教程一的时候写的代码,在show.blade.php中是这样写的,参见下方代码。没有引入Auth::user() 不会报错

@if (Auth::check())
      @include('users._follow_form')
    @endif

后来我比对了文件,没有任何的差别。因此我认为将 Auth::user() 传递到子视图中会是一个好的做法

2年前 评论
MArtian 2年前
MArtian 2年前
sinmu (作者) (楼主) 2年前
sinmu (作者) (楼主) 2年前

@sinmu 有结论了
你的 User.php 模型没有 isFollowing 方法,打开你的 User.php 模型,到 98 行,方法名写错了,你写的是 isFolllowing,多写了一个 l,改一下就解决了。

最后再说一下这里的业务逻辑,以及为什么不能传 Auth::user() 变量给 _follow_form.blade.php,还有为什么你传了之后就不报错了。

仔细看

@include('users._follow_form',['user' => Auth::user()])

你是这么写的,然后就不报错了,这是为什么呢?

我们来看 _follow_form.blade.php 模板

@can('follow', $user)   
// 看到这个 $user 了吗?它是继承自 `show.blade.php` 的,是控制器传递给它的变量,这个 $user 可以是任何用户,不是当前登录用户!!! 比如访问的路由地址是:/users/2 ,就是 id 为 2 的用户, /100 就是 id 100 这个用户,这个 $user 和 Auth::user() 要分清楚, $user 是你要查看的用户, Auth::user() 是当前登录的用户
  <div class="text-center mt-2 mb-4">
    @if (Auth::user()->isFollowing($user->id))

然后当你给 _follow_form 传递 ['user' => Auth::user()] ,这个操作就是把 _follow_form 继承自 show.blade.php$user 给覆写了, _follow_form$user 本来是继承自 show.blade.php 的 id 为 2 的用户,但是被你这么一传,$user 就变成当前登录的用户了。

但是你得出的结论是这样是没问题的,这样写就不报错了,确实不报错了,为什么呢?再来看 _follow_form

@can('follow', $user)

这里判断的是当前登录用户能不能 关注 当前访问的这个 $user,但是 $user 被你覆写成当前登录用户了,因为我们在 policy 中定义了 follow 策略,自己当然不能关注自己了,其实后面的代码都没有执行,所以没报错。

2年前 评论
MArtian (作者) 2年前
sinmu (楼主) 2年前

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