投稿のコントローラーPostController
を作成
sail artisan make:controller PostController
Read
投稿一覧(indexアクション) と 投稿詳細(showアクション)の登録
投稿一覧
- 現在ログイン中のユーザーに属するすべての投稿を取得し、作成日時が新しい順に並べ替える
「現在ログイン中のユーザー」を取得するには、Authファサードを利用
Auth::user()
- 1で取得した投稿を変数$postsに代入し、ビューに渡す
Userモデルのインスタンス(ここではAuth::user())に対してposts()メソッドが使えるようになった理由は、ミニブログ作成3 投稿用テーブルとモデルでUserモデルとPostモデルのリレーションシップを設定したから。
投稿詳細
Route::get('/posts/{post}', [PostController::class, 'show'])->name('posts.show');
/app/Http/Controllers/PostController
// Postモデルのインスタンスを受け取る public function show(Post $post) { return view('posts.show', compact('post')); }
このようにモデルのインスタンスを直接受け取ることでコードが減り、可読性が上がります。
ただしこの場合、ビュー内においてroute()ヘルパ関数の第2引数にモデルのインスタンスを渡す必要があるので注意しましょう(ビューは次節で作成します)。
<a href="{{ route('posts.show', $post) }}">詳細</a>
app/Http/Controllers/PostController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use App\Models\Post; class PostController extends Controller { + // 一覧ページ + public function index() + { + $posts = Auth::user()->posts()->orderBy('created_at', 'desc')->get(); + + return view('posts.index', compact('posts')); + } + // 詳細ページ + public function show(Post $post) + { + return view('posts.show', compact('post')); + } }