0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

超ざっくりと@extendsと@includeの違いを解説してみる

Posted at

はじめに

突然ですが、みなさんは「@include」と「@extends」の違いを説明できるでしょうか?

Laravelだとbladeファイルの読み込みシーンで頻出ですよね。

自分はなんとなく「どちらもビューを読み込めるが、@includeは引数が渡せて@extendsは渡せない」ぐらいの理解しかなく、危機感を感じたので少しまとめてみます。

前提(環境)

Laravel 9.52.16

先に結論

  • 「@extends」は共有レイアウトを読み込む時に使う
  • 「@include」は別のビューからBladeビューを読み込む時に使う

以下Laravelの公式ドキュメントを参照しながら解説していきます。

@extendsとは?

「このレイアウトをまた書くのは面倒くさいなあ…」という時に便利なのが@extendsです。

@extendsを使うと、一つのレイアウトをビューファイルとして他のビューにも読み込んで使えます。

resources/views/layouts/app.blade.php
<html>
    <head>
        <title>アプリの名前</title>
    </head>
    <body>
        <div class = "container">
            @yield('content')
        </div>
    </body>
</html>

上のように、使い回したいレイアウトファイルが存在するとします。

このレイアウトを他のビューでも使いたい時に、Bladeファイル内冒頭で@extendsを使います。

そしてapp.blade.php内に「@yield('content')」とあります。

この@yield'〇〇'の部分にビューファイルのセクション名を書くと、その内容をレイアウトへ表示できます。

views/child.blade.php
@extends('layouts.app')

@section('content')
    <p>このsectionがyieldに対応している</p>
@endsection

つまり、@extendsはアプリケーションのレイアウト(親ページ)を、他のビューファイル(子ページ)に継承するために使われます。

そして、一般的に親ビューは@yieldセクションを持ちます。

@includeとは

対して@includeは、共通の部品(ナビゲーションバーなど)を他のビューで再利用したいときに使います。

そして子ビューは、@includeされる親ビューで使用できるすべての変数にアクセスできます。

show.blade.php
@extends('layouts.app')

@section('content')
    <div class="sm:grid sm:grid-cols-3 sm:gap-10">
            {{-- ユーザ情報を表示するビューファイルを読み込む --}}
            @include('users.card')
    </div>
@endsection

「親ビューで使用できるすべての変数にアクセスできる」とは、コントローラから親ビューに渡される$userといった変数を、

@includeで継承される子ビューも使用できることを意味します。

まとめ

使い回したいレイアウト(親ビュー)を継承したいときは@extendsを使います。

そして@extendsで継承される子ビューのセクションは、親ビューの@yieldを使ってレイアウトに表示できます。

共通レイアウト以外の他のビューを部品として読み込みたいときは@includeを使います。

そして@includeの場合、親ビューが使えるすべての変数にアクセスできます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?