参考図書
継承
継承を使うことで各ページで共通するベースとなるレイアウトを用意して、展開できる。
継承とは
親の要素を子に受け継がせる
わかりやすい記事
セクション
継承でページをデザインするときに、ページ内の要素として活用されるのが「セクション」。
セクションは、レイアウト用に用意される区画。
レイアウト用テンプレートにセクション区画を用意しておく。
そうすると子のファイルでセクションをはめ込んで表示することができる。
この継承とセクションによって、ベースとなるレイアウトから同じレイアウトのページを作っていける。
@sectionと@yield
@section
レイアウトで様々な区画を定義するために用いられる。
@section(名前)
hogehoge表示内容
@endsection
このセクションは同じ名前の@yieldにはめ込まれ表示される
@yield
セクションの内容をはめ込んで表示するためのもの。
@yield(名前)
@yieldで指定した名前の@sectionがあると、yieldのところにはめ込まれる。
実例
継承元のレイアウトテンプレート
<body>
<h1>@yield('title')</h1>
@section('meubar')
<h2>メニュー</h2>
<ul>
<li>@show</li>
</ul>
<div class="content">
@yield('content')
</div>
<div class="footer">
@yield('footer')
</div>
</body>
はめ込み先を@yieldで名前を指定していくつか用意。
土台となるテンプレート側で@sectionを用意する場合は、終わりは@showとする。
@showの中に継承を受けるファイルに記述した同名前の@sectionの内容が展開される。(ここ難しい)
継承を受けるファイル
@extends('layouts.layout')
@section('title', 'インデックス')
@section('menubar')
@parent
インデックスページ
@endsection
@section('content')
<p>本文のコンテンツ</p>
@section('footer')
copyright 2020 tuyano
@endsection
@extendsで継承元のファイルを指定
@sectionとすることで、テンプレート側の同名前の@yieldにはめ込まれる。
両方のファイルに同名前の@sectionが合った場合は、継承を受けるファイルに記載されてるものが優先される。
ただし、継承元の@sectionの内容を引き継ぎたい場合は@parentを書く。
展開の流れ
テンプレート側の内容をコピーして、継承を受けるファイルの中で展開しているようだ。
展開したあと(もしくは同時)に、@sectionで設定した第二引数や内容がyield内で展開されている、んだとおもう。