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が空の場合、つまり投稿が一つもされていない場合は、それに対応したメッセージが表示される。