Laravel11のBladeの三世代以上の継承

オブジェクト指向のポリモーフィズムって便利ですね、私もよく継承させます。
traitなんて便利なものも出てきて困っていますが・・・。

例えば、一般的なものだと親メソッドに変更のないものはコール自体しなくて良いと思っていました。
Bladeの場合は親のままでも設定をしないといけないようです。

最上位のレイアウト (master.blade.php)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@yield('title', 'タイトル')</title>
</head>
<body>
    <header>
        <h1>Header Content</h1>
    </header>
    <main>
        @yield('content')
    </main>
    <footer>
        <p>Footer Content</p>
    </footer>
</body>
</html>

中間のテンプレート (admin-layout.blade.php)

@extends('master')

@section('content')
    {{-- 完全な共通化ができていて、最下位で定義することがなくてもこれが必要。 --}}
    @yield('content-top')
    
    <div class="admin-layout">
        <h2>中間コンテンツ</h2>
    </div>
@endsection

最下位のテンプレート (dashboard.blade.php)

@extends('admin-layout')

{{-- ちなみにこれは中間で設定をしなくても最上位にまで浸透する。 --}}
@section('title', '最下位のタイトル')

{{-- 一般的なノリだと@section('content')でいきたいが、それだと空で上書きになってしまう。 --}}
@section('content-top')
    {{-- なんの定義もする必要がなくてもこれが必要。 --}}
    @parent
@endsection

親子関係は設定できるけど、同じセクション名にして@parentを@overrideと同じと思っていると何も表示されなくなります。

投稿者プロフィール

TakaharaRyuji
PAGE TOP