LoginSignup
0
0

More than 1 year has passed since last update.

viewファイルを分割して外部化する(@yield)

Last updated at Posted at 2022-08-01

外部化とは

ヘッダーやフッター、グローバルナビゲーションの部分などの
共通する部分を部品化することを指します

これによって大掛かりなプロジェクトなどで何千ページのWEBサイトを作成する際には
共通する部分は呼び出すだけで済むため、作業の効率化につながります

@yieldとは

  • @sectionの内容を呼び出します。

@sectionとは

まずは実際の例をご覧ください

@yield('content')

@section('content')
  <p>ここにブログやニュース記事企業情報コンテンツ情報を記述します</p>
 
@endsection

実際の使い方

headタグやmetaタグなど共通要素を記述した親となるテンプレートファイルを作成します
例:resources/views/layouts/template.blade.php

  • titleタグには @yield で 後述のtitleの引数を呼び出しするよう記述しておきます
  • bodyタグには @yield で 後述のcontent の内容を呼び出しするよう記述しておきます
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>@yield('title')</title>
</head>
<body>
  @yield('content')
</body>
</html>

親テンプレートは他のbladeファイルで呼び出して使います

外部化ファイルの作り方

  1. 共通テンプレート(親)を呼び出すbladeファイルを作成します
    resources/views/contents/index.blade.php

  2. bladeファイルへ親テンプレートを継承する@extendsを記述します

  3. bladeファイルに親テンプレートが読み込まれます

  4. 親テンプレートの@yieldからsectionが呼び出されます

{{-- layoutsフォルダのapp.blade.phpを継承 --}}
@extends('layouts.template')

{{-- @yield('title')へtitleタグの値を代入されブラウザのタイトルが変更される --}}
@section('title', '記事一覧')

{{-- 呼び出された親要素の@yield('content')に以下のレイアウトを代入される --}}
@section('content')
  <p>ここにブログやニュース記事企業情報コンテンツ情報を記述します</p>
@endsection
  • 親テンプレートを継承したのでbladeファイルには@yield('content')が継承されています
  • @yieldより@section('content')が呼び出されるため、ここで初めてブラウザに表示されます
0
0
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
0