Laravel 基礎学習/View の仕組みと書き方
Laravel の View は、ブラウザへ表示する HTML を生成する重要な仕組み。
本記事では、View の役割や作成方法、View の作成に使用する Blade の基本について解説する。
View とは
Laravel の View は、
ブラウザへ表示する HTML を生成する仕組み。
Laravel では、
Controller で処理したデータを、
View へ渡して画面表示するのが基本。
Laravel では、
基本的に以下の流れで処理が行われる。
ブラウザアクセス
Route
URL に対応する Controller を決定
Controller
必要な処理を実行
Model
DB操作が必要な場合に利用する
View
ブラウザへ表示する HTML を生成
ブラウザへ表示
View では、
Controller から受け取ったデータを使って、
ブラウザへ表示する HTML を生成する。
View では、
基本的に DB 操作などは行わず、
受け取ったデータを画面表示する役割に集中する。
Laravel の View は、
Blade(ブレード)というテンプレート機能を使って作成するのが一般的。
Blade の基本については後述する。
View を作成する
Laravel では、
View ファイルを
resources/views
フォルダ内へ配置する。
このフォルダは、
Laravel プロジェクト作成時に最初から自動作成される。
View は、
Model や Controller と違い、
Laravel 固有のクラス構造を必要としないため、
Artisan の make コマンドではなく、
基本的に手動でファイルを作成する。
View ファイルの作成例
resources/views/articles/index.blade.php
- articles・・・記事に関する View をまとめるフォルダ
- index.blade.php・・・一覧画面の View ファイル
この例では、
articles フォルダ内へ、
記事一覧・記事詳細・記事作成画面など、
記事に関する View をまとめている。
また、
拡張子が
.blade.php
となっているのは、
Laravel の Blade テンプレートを使用する
View ファイルであることを表している。
命名規則
Laravel の View は、
小文字で命名することが多い。
ファイル名の例
top.blade.php
login.blade.php
register.blade.php
profile.blade.php
また、
関連する View をフォルダごとに分けて整理することも多い。
ディレクトリ分けの例
tresources/views
├ articles
│ ├ top.blade.php
│ ├ show.blade.php
│ └ edit.blade.php
├ auth
│ ├ login.blade.php
│ └ register.blade.php
├ users
│ └ profile.blade.php
└ layouts
└ app.blade.php
この例では、
articles フォルダへ記事関連の View、
auth フォルダへログイン関連の View、
users フォルダへユーザー関連の View をまとめている。
Laravel では、
Controller や URL の構成に合わせて
View フォルダを分けることが多い。
layouts フォルダには、
ヘッダーやフッターなど、
共通レイアウト用の View を配置することが多い。
よく使われる View フォルダ例
これらのフォルダ名は、
Laravel で慣習的によく使われているもの。
システム上必須というわけではなく、
プロジェクトごとに自由に構成できる。
| フォルダ名 | 用途 |
|---|---|
| layouts | 共通レイアウト |
| components | 再利用する View 部品 |
| partials | 部分的な View 読み込み |
| auth | ログイン関連 |
| admin | 管理画面関連 |
| users | ユーザー関連 |
| articles | 記事関連 |
| errors | エラー画面 |
| emails | メールテンプレート |
Blade テンプレートとは
Blade(ブレード)は、
Laravel に標準搭載されている
View 用のテンプレート機能。
Laravel では、
View を作成する際に、
Blade を使用するのが一般的。
Blade を使用することで、
HTML 内へ PHP データを埋め込みながら、
動的な画面を簡潔に作成できる。
例えば、
Controller から渡されたデータを画面へ表示したり、
条件分岐や繰り返し処理などを、
分かりやすく記述できる。
Blade は、
Laravel 独自のテンプレート機能だが、
最終的には通常の PHP と HTML へ変換されて動作している。
Blade は、
「HTML を書きやすくするための Laravel 専用記法」
と考えると分かりやすい。
View の基本形(Blade を使用)
Laravel の View は、
Blade を使用して以下のような形で作成する。
例
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>記事一覧</title>
</head>
<body>
<h1>記事一覧</h1>
@foreach ($articles as $article)
<h2>{{ $article->title }}</h2>
@endforeach
</body>
</html>
この View では、
Controller から渡された記事一覧データを、
Blade を使って画面へ表示している。
Blade を使用することで、
HTML 内へ PHP データを埋め込みながら、
動的な画面を簡潔に作成できる。
この例で使用している
@foreach や {{ }} は、
Blade 独自の記法。
Laravel の Blade では、
- {{ }}・・・データ出力
- @foreach・・・繰り返し処理
- @if・・・条件分岐
などを簡潔に記述できる。
Blade の例
@foreach ($articles as $article)
<h2>{{ $article->title }}</h2>
@endforeach
同じ処理を通常の PHP で書くと、
以下のようになる。
PHP の例
<?php foreach ($articles as $article): ?>
<h2><?php echo $article->title; ?></h2>
<?php endforeach; ?>
Blade を使用することで、
PHP タグを書き続ける必要がなくなり、
HTML と PHP を分かりやすく記述できる。
また、
{{ }} は、
HTML エスケープも自動で行われるため、
セキュリティ面でも安全に使用しやすい。
Blade / PHP 対応表
| Blade | PHP | 意味 |
|---|---|---|
| {{ $title }} | echo $title; | 変数出力 |
| @if ($isLogin) | if ($isLogin): | 条件分岐 |
| @elseif ($isAdmin) | elseif ($isAdmin): | 条件追加 |
| @else | else: | それ以外 |
| @foreach ($articles as $article) | foreach ($articles as $article): | 繰り返し処理 |
| @for ($i = 0; $i < 10; $i++) | for ($i = 0; $i < 10; $i++): | 回数指定ループ |
| @while ($count > 0) | while ($count > 0): | 条件ループ |
| @switch ($status) | switch ($status): | 条件分岐 |
| @case(‘success’) | case ‘success’: | 条件一致 |
| @break | break; | switch 終了 |
| @default | default: | どれにも一致しない場合 |
| @csrf | CSRF トークン生成処理 | フォームのセキュリティ対策 |
| @extends(‘layouts.app’) | レイアウト継承処理 | 共通レイアウト使用 |
| @section(‘content’) | コンテンツ定義処理 | レイアウトへ埋め込み |
| @include(‘parts.header’) | 部品読み込み処理 | View 部品読み込み |
まとめ
Laravel の View は、
ブラウザへ表示する HTML を生成する仕組み。
Laravel では、
Controller から受け取ったデータを、
Blade を使って画面へ表示する。
Blade を使用することで、
- データ出力
- 条件分岐
- 繰り返し処理
- レイアウト共通化
などを簡潔に記述できる。
まずは、
Controller から渡されたデータを、
Blade を使って画面表示する基本的な流れを理解することが重要。