Bladeのレイアウトを使って拡張する


Blade

 悩み事

いくつかのHTML要素を共通化させたい

すべてのHTMLページはいくつかの共通要素を持っています
ナビゲーションバー、コンテンツ領域、ヘッダーとフッターと云ったものです
これらを毎回コピーする事無く、レイアウトを利用してみましょう

 解決方法

Bladeレイアウトを作成して利用します

Step 1 - レイアウトを作成

app/views/layouts/main.blade.phpを作成します

<html>
  <head>
    {{-- 共通のヘッダー要素 --}}
  </head>
  <body>
    <div class="navigation">
      @section('navigation')
        <a href="/">Home</a>
        <a href="/contact">Contact</a>
      @show
    </div>
    <div class="container">
      @yield('content')
    </div>
  </body>
</html>

Step 2 - レイアウトを利用する準備

@extends('layouts.main')

@section('content')
  <p>
    コンテンツ
  </p>
@stop

@extendsを利用する場合、テンプレートの最初に記述しなければなりません

出力

レンダリングされたビューのHTMLは以下の様になります

<html>
  <head>
  </head>
  <body>
    <div class="navigation">
        <a href="/">Home</a>
        <a href="/contact">Contact</a>
    </div>
    <div class="container">
  <p>
    コンテンツ
  </p>
    </div>
  </body>
</html>

 アドバイス

すでに他のフレームワークでTwigやSmartyを利用した経験があれば、
同じ様な動作をさせる事が出来ます