2018/10/12
MVCモデルのビューについてみていきます。
LaravelではBladeというテンプレートエンジンを使っているので、まずはBladeについて理解しないといけません。
Bladeについて
BladeとはPHPのテンプレートエンジンです。
テンプレートエンジンではHTMLのひな型を元に画面を作成していきます。
有名どころではSmartyがありますね。
Bladeでも共通レイアウトを作成し、それを利用してビューの画面を作成します。
Laravel5.2におけるビュー(Blade)のディレクトリは resources/viewsディレクトリになります。
Bladeを使ってビュー画面を作成する流れ
【1】 共通レイアウトを作成
【2】 共通レイアウトを利用してビュー画面の作成
【1】 共通レイアウトを作成
共通するパーツをここで指定します。
ページごとに変わる箇所は @yield('content') と記述します。
この箇所が実際のページのコンテンツを流し込む箇所になります。
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>My Blog</title> </head> <body> @yield('content') </body> </html>
【2】 共通レイアウトを利用してビュー画面の作成
まず冒頭で共通レイアウトを読み込みます。
@extends('layout')
共通レイアウトで @yield('content') と記述した箇所にコンテンツを流し込みます。
@section('content') ~ @endsection で囲みます。
@section('content') <h1>サンプルページ</h1> <p>これはサンプルページです。</p> @endsection
まとめて書くと以下のようになります。
@extends('layout') @section('content') <h1>サンプルページ</h1> <p>これはサンプルページです。</p> @endsection
Bladeで変数を表示させる
変数を波括弧で囲うことで表示できます
{{ }}文は、XSS対策としてエスケープしてくれます。
※XSS(クロスサイトスクリプティング)・・・JavaScriptのコードを制作者の意図していない場所に埋め込む悪意のある攻撃手法。
<p>こんにちは! {{ $name }}さん!</p>
{!! !!}文は、エスケープしません。
<? $name="<strong>".ララベル."</strong>"; ?> <p>こんにちは! {!! $name !!}さん!</p>
以下のようにレンダリングされます。
<p>こんにちは! <strong>ララベル</strong>さん!</p>
コメント表示
{{-- コメント --}}
制御構造
条件文やループなどの一般的なPHPの制御構文が使えます。
If文
@if (count($records) === 1) レコードが一つある! @elseif (count($records) > 1) 複数のレコードがある! @else レコードが全くない! @endif
繰り返し
一覧表示などでデータベースのレコードを表示させるときに使います。
@foreach ($users as $user) <p>これはユーザー {{ $user->id }}</p> @endforeach
Bladeについては以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。