初めてのLaravel 5.1 : (14) MVC

laravel_mvc2

前回、Seed機能を使って、Articlesテーブルにサンプルデータを作成しました。今回は Laravel でこれらの情報を表示して見ます。

今まではコントローラからビューを表示する部分しかやっていませんでしたが、今回はコントローラからモデルに問い合わせ、モデルがDBからデータを取得し、そのデータをビューに渡して画面表示します。MVCパターンのフローを一巡りします。


Routing

routes.php に以下の2行を追加します。

// app/Http/routes.php

Route::get('articles', 'ArticlesController@index');
Route::get('articles/{id}', 'ArticlesController@show');

{id} は、showメソッドに idパラメータ引き渡すことを意味しています。


記事一覧を表示する

Controller

ArticlesControllerを作成します。

php artisan make:controller ArticlesController --plain

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>
            <div class="body">
                {{ $article->body }}
            </div>
        </article>
    @endforeach
@endsection
  • 以前に作成した、layoutビューを継承しています。
  • @foreachで1件づつ 記事の作成を繰り返しています。
  • 記事のタイトルは urlヘルパ関数で、’articles/{id}’へのリンクを張っています。

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.1/eloquent
  • http://localhost:8000/article/{id}に、実在しない id でアクセスし、どの様に表示されるかチェックしてください。
  • .envファイル内のAPP_DEBUGをfalseにして、http://localhost:8000/article/{id}に、実在しない id でアクセスしてみてください。どの様に変わりましたか?

まとめ

  • MVCパターンを理解することができました
  • モデルで問い合わせたDBのデータをビューに表示することができました
  • ビューで@foreachが使えるようになりました

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中