本节加载子视图哪里,似乎少了一个Auth::user()的传入
教程中的show.blade.php

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

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


这里面的子视图有点局部变量的味道。
引入的子视图传递过去的话,似乎就无法捕捉这种认证过的user信息
关于 LearnKu
同学你好
最近新人好像多起来了
这个地方是不需要传参
$user的,因为Laravel的视图之间是可以继承共享变量的,如果子视图没有$user,代表引用子视图的父视图也没有$user,你可以在show.blade.php打印一下$user,看看是否能正常访问。感谢你的意见。但是我核实 了一下教程,发现教程上这一小结_follow_form.blade.php 并没有写继承,而是在show.blade.php里面直接引入的这个文件。下面是教程上的截图
下面的截图就是 show.blade.php 我的代码
下面是我 _follow_form.blade.php 的代码
在上图 show.blade.php 的第17行,教程上的代码如下
当我按照教程上的代码访问的时候,提示错误信息
我也赞同你的说法,应该是在子视图里面可以访问到
Auth::user()这个模型类的。但是他的确报错了。然后我查询我第一次刷教程一的时候写的代码,在
show.blade.php中是这样写的,参见下方代码。没有引入Auth::user()不会报错后来我比对了文件,没有任何的差别。因此我认为将
Auth::user()传递到子视图中会是一个好的做法@sinmu 有结论了
你的
User.php模型没有isFollowing方法,打开你的User.php模型,到 98 行,方法名写错了,你写的是isFolllowing,多写了一个l,改一下就解决了。最后再说一下这里的业务逻辑,以及为什么不能传
Auth::user()变量给_follow_form.blade.php,还有为什么你传了之后就不报错了。仔细看
你是这么写的,然后就不报错了,这是为什么呢?
我们来看
_follow_form.blade.php模板然后当你给
_follow_form传递['user' => Auth::user()],这个操作就是把_follow_form继承自show.blade.php的$user给覆写了,_follow_form的$user本来是继承自show.blade.php的 id 为 2 的用户,但是被你这么一传,$user就变成当前登录的用户了。但是你得出的结论是这样是没问题的,这样写就不报错了,确实不报错了,为什么呢?再来看
_follow_form这里判断的是当前登录用户能不能
关注当前访问的这个$user,但是$user被你覆写成当前登录用户了,因为我们在policy中定义了follow策略,自己当然不能关注自己了,其实后面的代码都没有执行,所以没报错。