index~全データ表示
データの一覧を表示させるルーティングとしてindex
を使う。
前提
モデルデータの操作で準備した枠組みを使う。ユーザー認証機能を持ち、ユーザーごとに入力されたシンプルな投稿記事Post
を扱う。
流れ
ドメイン名/posts
をGETリクエストposts.index
ルートでPostsController
のindex
アクションを実行index
アクションでログインユーザーの投稿記事を表示
indexアクションの呼び出し
リソースルーティングで以下のように設定されていて、GETメソッドによるリクエストの場合、ドメイン/posts
からPostController
のindex
アクションにルーティングされる。ルーティング名はposts
。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ php artisan route:list +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ ........ | | POST | posts | posts.store | App\Http\Controllers\PostController@store | web,auth | | | GET|HEAD | posts | posts.index | App\Http\Controllers\PostController@index | web,auth | | | GET|HEAD | posts/create | posts.create | App\Http\Controllers\PostController@create | web,auth | | | GET|HEAD | posts/{post} | posts.show | App\Http\Controllers\PostController@show | web,auth | | | DELETE | posts/{post} | posts.destroy | App\Http\Controllers\PostController@destroy | web,auth | | | PUT|PATCH | posts/{post} | posts.update | App\Http\Controllers\PostController@update | web,auth | | | GET|HEAD | posts/{post}/edit | posts.edit | App\Http\Controllers\PostController@edit | web,auth | ........ |
コントローラー~indexアクション
ルーティングに従って、PostController
のindex
アクションを以下のように記述する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class PostController extends Controller { ........ public function index() { $posts = Post::all(); return view('posts.index', [ 'title' => '投稿一覧', 'posts' => $posts, ]); } ........ } |
all()
メソッドは、Postモデルのデータが保存されているposts
テーブルから全データを取得して配列として返す。つまりこの段階では、すべてのログインユーザーが他のユーザーのものも含めた全投稿を見られることになる。
Post
クラスや継承元のModel
クラスはall()
メソッドを持たないが、store()
アクションで見たのと同じようにModel
クラスのマジックメソッドから呼び出していると思われる。
投稿記事の配列はresource/posts/index.blade.php
に'posts'
として渡され、これがindex
ビューで$posts
として利用される。
表示ビュー
投稿表示はindex.blade.php
に以下の要領で記述。
1 2 3 4 5 |
@forelse ($posts as $post) <p>{{ $post->comment }} : {{ $post->created_at }}</p> @empty <p>投稿はありません。</p> @endforelse |
ここでは@forelse
ディレクティブで$posts
に格納された投稿記事群を一つずつ取り出して、comment
とcreated_at
(datetime
型)を表示させている。
$posts
はindex
アクションで読み込まれた投稿記事を格納した配列。
@forelse
を使っているので、$posts
が空の場合、つまり投稿が一つもされていない場合は、それに対応したメッセージが表示される。