前回、Articles テーブルにサンプルデータを作成しました。今回は Laravel でこれらの情報を表示します。
今まではコントローラからビューを表示する部分しかやっていませんでしたが、今回はコントローラからモデルに問い合わせ、モデルが DB からデータを取得し、そのデータをビューに渡して画面表示します。MVC パターンのフローを一巡りします。
Routing
web.php に以下の2行を追加します。
// routes/web.php Route::get('articles', 'ArticlesController@index'); Route::get('articles/{id}', 'ArticlesController@show');
{id} は、showメソッドに id パラメータ引き渡すことを意味しています。
記事一覧を表示する
Controller
ArticlesController を作成します。
php artisan make:controller ArticlesController
ArticlesController に index と show メソッドを追加します。
// app/Http/Controllers/ArticlesController.php use App\Article; class ArticlesController extends Controller { public function index() { $articles = Article::all(); return view('articles.index', compact('articles')); } public function show($id) { return $id; } }
- index() は Articles テーブルのデータ全てを抽出し、ビューに渡しています。
- show() は、とりあえず引数で受け取った $id を表示するのみにしておきます。
View
articles.indexビューを作成します。
<!-- resouces/views/articles/index.blade.php --> @extends('layout') @section('content') <h1>Articles</h1> <hr/> @foreach($articles as $article) <article> <h2> <a href="{{ url('articles', $article->id) }}"> {{ $article->title }} </a> </h2> </article> @endforeach @endsection
- 以前に作成した、layoutビューを継承しています。
- @foreachで1件づつ 記事の作成を繰り返しています。
- 記事のタイトルは urlヘルパ関数で、’articles/{id}’ へのリンクを張っています。
動作確認
まずはサーバを起動します。
php artisan serve
http://localhost:8000/articles へアクセスして、記事一覧が表示されることを確認てください。
記事のタイトルをクリックすると、id が表示されます。
記事の表示
Controller
showメソッドを実装します。
// app/Http/Controllers/ArticlesController.php class ArticlesController extends Controller { // ... public function show($id) { $article = Article::findOrFail($id); return view('articles.show', compact('article')); } }
findOfFail メソッドを使って、id で Articles から記事を取得しています。
View
articles.showビューを作成します。
<!-- resouces/views/articles/show.blade.php --> @extends('layout') @section('content') <h1>{{ $article->title }}</h1> <hr/> <article> <div class="body">{{ $article->body }}</div> </article> @endsection
http://localhost:8000/articles へアクセスし、記事一覧を表示します。
記事のタイトルをクリックし、記事が1件表示されれば完成です。
演習
- Eloquent のドキュメントで、all() や findOrFail() をチェックしてみ下さい。また、その他のメソッドもチェックしてみてください。
http://laravel.com/docs/5.6/eloquent - http://localhost:8000/article/{id} に、実在しない id でアクセスし、どの様に表示されるかチェックしてください。
まとめ
MVC パターンを理解することができました。
モデルで問い合わせた DB のデータをビューに表示することができました。
ビューで @foreach が使えるようになりました。