【0からWEBサービスを作ろう】LaravelのBladeを使う

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

今回はWEBサービスにLaravelのテンプレートエンジンであるBladeを導入します。
Bladeを利用することで「継承機能」と「セクション定義機能」を利用することができます。
この二つを使うことでWEBサービス内のかなりの部分を共通化することができます。

Bladeの継承機能

色々なWEBサービスを見ていると、一つのWEBサービス内に含まれるページには共通の部分があり、共通のレイアウトで一部分だけが異なる場合が多数あります。
このような実装をするには、全ページをコピペして作る方法があります。しかし、これだとヘッダー部分やフッター部分を修正する場合に修正量が膨大になります。
このような状況を解決するために「Bladeの継承機能」を利用します。
「Bladeの継承機能」はWEBサービス内のページの共通部分を定義しておき、各ページではそのレイアウトを継承することで、差分だけを記載することでページが完成します。
まずは、WEBサービスの共通部分を括り出したbase.blade.phpを定義します。
<!doctype html>
<html lang="ja">
    <head>
      <!-- 共通HTMLヘッダーおよび画面毎HTMLヘッダーの領域を定義 -->
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>テクニカルブックス </title>
    </head>
    <body>
        <div>
          <!-- 共通ヘッダーおよび画面毎ヘッダーの領域を定義 -->
        </div>
        <div>
          <!-- 共通コンテンツおよび画面毎コンテンツの領域を定義 -->
        </div>
        <div>
          <!-- 共通フッターおよび画面毎フッターの領域を定義 -->
        </div>
        <div>
          <!-- 共通モーダルおよび画面毎モーダルの領域を定義 -->
        </div>
        <div>
          <!-- 共通scriptおよび画面毎scriptの領域を定義 -->
        </div>
    </body>
</html>

Bladeのセクション定義機能

Bladeの継承機能はBladeのセクション定義機能の利用を前提としています。
セクション定義機能とは、レイアウト内に後でHTMLを埋め込めるように、事前に領域を確保しておく機能です。
<!doctype html>
<html lang="ja">
    <head>
        @section('head')
            <!-- 共通HTMLヘッダーおよび画面毎HTMLヘッダーの領域を定義 -->
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <meta name="description" itemprop="description" content="@yield('description')">
            <meta name="keywords" itemprop="keywords" content="@yield('keywords')">
            <title>テクニカルブックス | @yield('title')</title>
        @show
        @section('css')
            <!-- 共通CSSおよび画面毎CSSの領域を定義 -->
        @show
    </head>
    <body>
        <div>
            @section('header')
            	<!-- 共通ヘッダーおよび画面毎ヘッダーの領域を定義 -->
            @show
        </div>
        <div>
            @section('content')
            	<!-- 共通コンテンツおよび画面毎コンテンツの領域を定義 -->
            @show
        </div>
        <div>
            @section('footer')
            	<!-- 共通フッターおよび画面毎フッターの領域を定義 -->
            @show
        </div>
        <div>
            @section('modals')
                <!-- 共通モーダルおよび画面毎モーダルの領域を定義 -->
            @show
        </div>
        <div>
            @section('script')
                <!-- 共通scriptおよび画面毎scriptの領域を定義 -->
            @show
        </div>
    </body>
</html>

まとめ

今回はBladeの機能を使いました。
Bladeの機能は他にも多数あり、使いこなすことで画面作成を効率的にすることができます。
@extends('layout.base')

@section('title', 'To Do')
@section('keywords', 'テクニカルブックス,TODO')
@section('description', 'サービス内で実装のTODOリスト')

@section('head')
  @parent
@endsection

@section('css')
  @parent
  css
@endsection

@section('header')
  @parent
  header
@endsection

@section('content')
  @parent
  content
@endsection

@section('footer')
  @parent
  footer
@endsection

@section('modals')
  @parent
  modals
@endsection

@section('script')
  @parent
  script
@endsection