ログインユーザーのみ削除ボタンを表示させたい
解決したいこと
現在laravelでインスタグラムの簡易サイトを作っています。
投稿した写真を削除するボタンを実装したのですが、全てのユーザーのページで表示されてしまいます。
ログインユーザーのみ表示されるようにするにはどうしたら良いでしょうか。
Views
resources/views/posts/show.blade.php.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="d-flex pt-3">
<div class="col-8">
<img src="/storage/{{ $post->image }}" class="w-100">
</div>
<div clas="col-4">
<div>
<div class="d-flex align-items-center">
<div class="pe-3 ps-3">
<img src="/storage/{{ $post->user->profile->image}}" class="rounded-circle w-100" style="max-width: 40px;">
</div>
<div>
<div class="font-weight-bold d-flex">
<a href="/profile/{{ $post->user->id }}">
<span class="text-dark">{{ $post->user->username }}</span>
</a> |
<div class="ps-3">
<form onsubmit="return confirm('本当に削除しますか?')" action="{{ route('post.destroy', $post) }}" method="post">
@csrf
@method('delete')
<button type="submit" class="btn btn-outline-danger">削除</button>
</form>
</div>
</div>
</div>
</div>
<hr>
<p>
<span class="font-weight-bold">
<a href="/profile/{{ $post->user->id }}">
<span class="text-dark ps-3">{{ $post->user->username }}</span>
</a>
</span> <div class="ps-3">{{ $post->caption }}</div>
</p>
<hr>
</div>
<div class="d-flex align-items-center pe-3 ps-3">
<div onclick="like({{$post->id}})"><i class="far fa-heart like-btn" ></i></div>
<div onclick="unlike({{$post->id}})"><i class="fas fa-heart unlike-btn" style="display:none;"></i></div>
</div>
<hr>
</div>
</div>
</div>
@endsection
<script src="{{ asset('js/alert.js') }}"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="{{ asset('/css/like.css') }}" >
Models
Models/Post.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $guarded = [];
public function user()
{
return $this->belongsTo(User::class);
}
public function likes()
{
return $this->hasMany(Like::class);
}
// 一覧画面
public function getTimeLines(Int $user_id, Array $follow_ids)
{
// 自身とフォローしているユーザIDを結合する
$follow_ids[] = $user_id;
return $this->whereIn('user_id', $follow_ids)->orderBy('created_at', 'DESC')->paginate(50);
}
public function postDestroy(Int $user_id, Int $post_id)
{
return $this->where('user_id', $user_id)->where('id', $post_id)->delete();
}
}
Controllers
Controllers/PostsController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
use App\Models\Post;
use App\Models\Like;
use App\Models\Follower;
use Illuminate\Support\Facades\Auth;
class PostsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function create()
{
$user = auth()->user();
return view('posts.create', [
'user' => $user
]);
}
public function index(Post $posts, Follower $follower)
{
$user = auth()->user();
$follow_ids = $follower->followingIds($user->id);
// followed_idだけ抜き出す
$following_ids = $follow_ids->pluck('followed_id')->toArray();
$timelines = $posts->getTimelines($user->id, $following_ids);
return view('posts.timeline', [
'user' => $user,
'timelines' => $timelines,
'post' => $posts
]);
}
public function store()
{
$data = request()->validate([
'caption' => 'required',
'image' => ['required', 'image'],
]);
$imagePath = request('image')->store('uploads', 'public');
$image = Image::make(public_path("storage/{$imagePath}"))->fit(1200,1200);
$image->save();
auth()->user()->posts()->create([
'caption' => $data['caption'],
'image' => $imagePath,
]);
return redirect('/profile/' . auth()->user()->id);
}
public function show(\App\Models\Post $post)
{
$user = auth()->user();
return view('posts.show', compact('post'), [
'user' => $user
]);
}
public function destroy(Post $post)
{
$post->delete();
return redirect('/profile/' . auth()->user()->id);
}
}
自分で試したこと
@if (auth()->user($user->id))など試しましたが、
どういったコードを書けばいいのか右も左もわからない状況なので教えていただきたいです。
0