Laravel - 8. ビュー - レイアウトの分離

引き続きビューの仕組みについて学習していきましょう。Bladeテンプレートエンジンではレイアウトを管理する仕組み用意されています。あらかじめレイアウトを定義したビューファイルを用意しておくことで、画面のヘッダーやフッター、サイドバーといった共通部分を再利用できます。

ここではまずレイアウトを定義するために既存の resources/views/ フォルダに layout フォルダを作成しておきましょう。それからレイアウトを定義する resources/views/layout/app.blade.php ファイルを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Sample</title>
</head>
<body>
  <h1>Hello Laravel!</h1>
  <hr>
  @yield('content')
</body>
</html>

上記の app.blade.php ファイルがレイアウトを構成するファイルです。ここでは簡易なヘッダーとして h1 タグで Hello Laravel! という出力と hr タグで水平線を引いてます。そのあと @yield('content') ディレクティブによって、個々のビューファイルの内容を読み込むようにしています。

続いてビューファイル( resources/views/hello/index.blade.php )を編集してレイアウトを適用するように修正してみましょう。

@extends('layout.app')

@section('content')
<h1>{{ $title }}</h1>  
<ul>
  @foreach ($messages as $message)
    @if (mb_strlen($message) >= 5)
      <li>{{ $message }}</li>
    @endif
  @endforeach
</ul>
@endsection

上記のビューファイルでは @extends('layout.app') とすることでレイアウトファイルを指定しています。また @section('content') ディレクティブはレイアウトの中の yield('content') と関連しており、 @section('content')@endsection で囲まれた範囲が yield('content') に反映されるようになっています。

動作確認

レイアウトファイルを適用するようにビューを修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。

$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000

続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。

http://localhost:8000/hello

実行結果からビューファイルにレイアウトを適用できていることがわかります。

まとめ

  • Bladeによってレイアウトを定義できる
  • @extends ディレクティブによって拡張するレイアウトファイルを指定する
  • @section ディレクティブによってレイアウト内の変更部分(セクション)を定義する