| この記事の要点 |
|---|
|
Laravelの親ビュー、子ビューに関する記事です。
テンプレートとなる親ビューの作成
以下はLaravel 13のBladeで描画確認した例です。親・子・部分ビューの名前を具体的にそろえます。既存アプリに追加する場合はビュー名や確認用URLの衝突を避けてください。
viewsディレクトリ内に任意ディレクトリを作り、
以下の例ではlayoutsディレクトリへapp.blade.phpを配置する。任意の名前も使えるが、子の@extendsと一致させる。
※ファイルの拡張子をXXX.blade.phpとする。
resources/views/layouts/app.blade.php
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title', 'Default Title')</title>
</head>
<body>
<aside>
@section('sidebar')
サイドバー
@show
</aside>
<main>@yield('content')</main>
</body>
</html>
@sectionディレクティブはコンテンツのセクションを定義する。
@yieldディレクティブは指定したセクションの内容を表示するために使用する。
子ビューの作成
子ビューを定義するには、Blade @extendsディレクティブを使用する。
Bladeレイアウトを拡張するビューは、@sectionディレクティブを使用し、レイアウトのセクションに内容を挿入。
レイアウトでセクションを表示するには@yieldを使用する。
resources/views/page.blade.php
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>サイドバーに追加</p>
@endsection
@section('content')
<p>本文のコンテンツ</p>
@include('partials.notice', ['message' => '表示例'])
@endsection
sidebarセクションでは、レイアウトのサイドバーの内容をコンテンツに上書きするのではなく、
追加するために@parentディレクティブを使用。
@parentディレクティブはビューをレンダーするときに、レイアウトの内容に置き変わる。
@includeを使用することで個別にビューを読み込むことが出来る。
@include('partials.notice', ['message' => '表示例'])部分ビューと表示用ルートを用意する
resources/views/partials/notice.blade.phpを作成します。上の子ビューからmessageを渡して読み込みます。{{ $message }}はHTMLをエスケープして表示するため、利用者が入力した文字列をそのままHTMLとして実行しません。
<p class="notice">{{ $message }}</p>学習用アプリのroutes/web.phpへ確認用ルートを追加する例です。表示対象は親ではなく子ビューpageです。既存のRouteインポートがある場合、重ねて追加する必要はありません。
use Illuminate\Support\Facades\Route;
Route::get('/blade-example', function () {
return view('page');
});/blade-exampleを開き、ページタイトルがPage Title、サイドバーに親の「サイドバー」と子の「サイドバーに追加」、本文に「本文のコンテンツ」と「表示例」が出ることを確認します。
ディレクティブの使い分け
| 書き方 | この例での役割 |
|---|---|
| @extends | 子が使う親レイアウトを指定。layouts.appはlayouts/app.blade.phpに対応 |
| @section / @endsection | 子で名前付きの内容を定義。ここで終了してもその位置には表示しない |
| @yield | 親の指定位置へセクションを表示。通常のPHP文のような末尾セミコロンは不要 |
| @section / @show | 親で既定の内容を定義して、その位置に表示 |
| @parent | 子のセクション内で親の既定内容を残す。省略すれば子の内容で置き換わる |
| @include | 別のビューを読み込む。レイアウトの継承とは別の仕組み |
表示できないときの確認
- View not found: ファイル名・ディレクトリ・ドット表記を対応させます。大文字小文字の違いにも注意します。
- 本文が空: 親の@yieldと子の@sectionの名前が一致するか、子ビューを表示しているか確認します。
- 親のサイドバーが消えた: 子が同名セクションを定義するとき、@parentで既定内容を残しているか確認します。
- 意図しない「;」が表示: @yieldの末尾に付けたセミコロンは本文として出るので取り除きます。
確認範囲は親子の継承・@parent・@include・変数のHTMLエスケープです。既存アプリのCSSや認証ルートの動作まではこの例だけでは保証しません。
公式資料: Laravel 13 Bladeのテンプレート継承・部分ビュー・エスケープ(2026年10月確認)。
子ページはありません
- 親ビューと子ビュー(@section, @yield, @extends, @parent, @include)
- 条件分岐(@if)
- 繰り返し(@for, @foreach, @forelse, @while)
- 個別のページにcssやjsを反映させる方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38