1.

【Laravel】親ビューと子ビュー(@section, @yield, @extends, @parent, @include)

▶
この記事の要点
  • Laravel Blade の親ビュー / 子ビュー(テンプレート継承)
  • 親側: @section / @yield で差し込み枠を定義
  • 子側: @extends('親') + @section('name') ... @endsection
  • 部分テンプレ取込: @include('partial') / 親内容呼び出し: @parent

 

Laravelの親ビュー、子ビューに関する記事です。

 

テンプレートとなる親ビューの作成

親ビューlayouts.appの差し込み枠に子ビューpageのsectionを表示し、parentで既定内容を残しincludeで部分ビューを読み込む構成図

以下は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月確認)。

Post Share
子ページ

子ページはありません

同階層のページ
  1. 親ビューと子ビュー(@section, @yield, @extends, @parent, @include)
  2. 条件分岐(@if)
  3. 繰り返し(@for, @foreach, @forelse, @while)
  4. 個別のページにcssやjsを反映させる方法