Bladeのセクションをコンテンツに出力する


Blade

 悩み事

Bladeテンプレートでセクションを出力したい

 解決方法

@yield を利用します

次の様なBladeテンプレートを考えてみます

@section('bottom')
  This is the bottom
@stop
@section('top')
  This is the top
@stop
@yield('top')
@yield('bottom')

次の様に出力されます

This is the top
This is the bottom

@yieldにデフォルト値を指定する事もできます

以下の様な単純なレイアウトを考えてみましょう
(レイアウトについては Bladeのレイアウトを使って拡張する を参照して下さい)

<html>
  <body>
    <div class="container">
      @yield('content','No content')
    </div>
  </body>
</html>

ビューに @section('content') が無い場合、
下記の様に出力されます

<html>
  <body>
    <div class="container">
      No content
    </div>
  </body>
</html>

 アドバイス

@yieldでデフォルトを使用するのは、
条件や処理によってコンテンツが無い場合等に非常に有用です

レイアウトで以下の様にしておくのも良いかもしれません

@yield('content', '<span style="background:red">MISSING CONTENT</span>')

コンテンツが無い場合には、赤いブロックで MISSING CONTENT と表示されます

他にも各metaタグや、title, keywords, dexcription等に使用するのもおすすめです