我使用laravel构建了一个类似于instagram的应用,它具有instagram这样的关注/取消关注系统。我想在访问个人资料时隐藏我的关注按钮,因为我们无法在真实的instagram应用程序中关注自己。
我试图获取配置文件和用户表的ID并设置一个条件:如果它们相等,则按钮会隐藏。
这些是模型:
用户模型
public function posts(){
return $this->hasMany(Post::class)->orderBy('created_at' , 'DESC');
}
public function following(){
return $this->belongsToMany(Profile::class);
}
public function profile(){
return $this->hasOne(Profile::class);
}
个人资料模型
class Profile extends Model
{
public function followers() {
return $this->belongsToMany(User::class);
}
public function user() {
return $this->belongsTo(User::class);
}
}
FollowsController
class FollowsController extends Controller
{
public function __construct(){
$this->middleware('auth');
}
public function store(User $user){
return auth()->user()->following()->toggle($user->profile);
}
}
ProfileController:在这里,我想从模型中获取配置文件ID和用户ID,并通过紧凑型将其发送给视图,在我想匹配此值并检查它们是否相等或不是,但配置文件ID死亡并转储时返回“ null”。
public function index(User $user , Profile $profile)
{
$follows = (auth()->user()) ? auth()->user()->following->contains($user- >id) : false ;
return view('profiles.index' , compact('user' ,'follows', 'profileId' ,
'userId'));
}
这是显示个人资料的索引视图中的vue标记,我只想在其中添加v-if条件并阻止当前用户跟随自己
<follow-button my-user-id="{{ $user->id }}" follows="{{ $follows }}" >
</follow-button>
我只想禁止用户跟踪自己,方法是在显示个人资料页面时隐藏其个人资料的关注按钮。请帮助
答案 0 :(得分:0)
以下代码的问题在于,您永远不会定义$profileId
和$userId
,因此它们将以null
的形式发送到视图。
public function index(User $user , Profile $profile)
{
$follows = (auth()->user()) ? auth()->user()->following->contains($user->id) : false;
return view('profiles.index', compact('user', 'follows', 'profileId', 'userId'));
}
我认为您可能可以执行以下操作:
public function index(User $user)
{
$follows = auth()->user() ? auth()->user()->following->contains($user->id) : false;
return view('profiles.index', compact('user', 'follows'));
}
在您看来:
@if(auth()->check() && auth()->user()->id !== $user->id)
<follow-button my-user-id="{{ $user->id }}" follows="{{ $follows }}"></follow-button>
@endif
上面的代码检查是否:
-用户已登录(如果您未登录,那么我也不能跟随某人)
-当前通过身份验证的用户ID与$user
(正在访问的配置文件)ID不同,如果通过身份验证的用户查看自己的配置文件,该ID将立即显示按钮。