初めてのLaravel 5.6 : (14) MVC

laravel_mvc2

前回、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 が使えるようになりました。

コメントを残す