【Laravel】テンプレートエンジンのBladeとは:基本的な使い方

2023.10.01 /

【Laravel】テンプレートエンジンのBladeとは:基本的な使い方

記事ではPHPフレームワークのLaravelにおける、テンプレートエンジンのBladeについて詳しく解説していきます。

BladeとはLaravelに備わっているテンプレートエンジンの1つであり、Webページを効率的にレイアウトするための様々な機能を備えています。

LaravelでのWebアプリケーション開発では必須の知識です。本記事を通してBladeの基本的な使い方について理解を深めてください。

Blade

Bladeとは

Laravelは「Blade」という高機能なテンプレート機能を備えています。Blade(ブレード)とはLaravelでレンダリングを行うテンプレートエンジンの一つです。

Laravel用語の確認

レンダリングとはテンプレートを読み込んだ後に様々な処理を行い、ユーザー側に表示するページ(HTML)を生成する作業のことです

Bladeファイルは「.blade.php」拡張子を使用して、「resources/views」フォルダ内に保存します。またテンプレートはMVCにおける「ビュー(View)」に相当します。

MVCとは

LaravelはMVC(Model-View-Controller)と呼ばれるアーキテクチャで構成されます。MVCとはアプリケーションをModel、View、Controllerの3つの要素を組み合わせて構築していくことです。

MVC 説明
モデル(Model) データベースとの架け橋。データにアクセスしてデータの取得・保存・削除を担っています。またデータを扱いやすい形に変換する役割もあります
ビュー(View) フロントサイドを作成(ユーザー側に表示される画面を作る)
コントローラー(Controller) ビューとモデルの仲介役。モデルからデータを取得し、ビューに渡したり、ビューから受け取ったデータをモデルに渡して処理させる

BladeではWebページを効率的にレイアウトするための機能を備えています。テンプレート継承機能では既存のテンプレートを継承して新しいテンプレートを定義できますし、コンポート機能ではレイアウトを複数のコンポーネント(部品)に分けてレイアウトを構成していきます。

このような便利な機能を備えているため、LaravelのテンプレートエンジンにはBladeを利用することがおすすめです。

Bladeの主な機能

Bladeには次の機能を備えています。

Bladeの主な機能 説明
ディレクティブ @を付けることでPHPの処理を実行できる
変数の出力 {{}}構文を使って親から渡された変数を出力します
レイアウトの継承 テンプレートを継承し、レイアウトを簡単に拡張できる
コンポーネント 細かい部品に分けてレイアウトを構成する
インクルード 他のBladeを内部に組み込む

{{}}構文では自動的にHTMLをエスケープしますが、{!! !!}とすることでエスケープされてないデータを出力できます。

テンプレートの基本的な使い方

変数の表示

Bladeテンプレートを使ってコントローラーから渡された変数をテンプレートで表示してみます。

routeフォルダ内のweb.phpには次のようにルートを記述します。

Route::get('/', \App\Http\Controllers\IndexController::class);

次にIndexController.php(シングルアクションコントローラ)には次のように記述します。

class IndexController extends Controller
{
    public function __invoke(Request $request)
    {
        return view('index', ['name' => 'office54']);
    }
}

ここではテンプレートの呼び出しにヘルパー関数のviewを利用しています。viewヘルパー関数は第一引数にテンプレート名を指定することでテンプレートを読み込んで返します。第二引数にはテンプレートに渡すデータを配列で渡すことができます。

viewヘルパー関数は以下構文に従って使用します。

構文

view('フォルダ名.ファイル名', テンプレートに渡すデータ)

viewヘルパー関数ではテンプレートを「views」フォルダ内から検索します。例えば「test.index」と引数に指定した場合、viewsフォルダ内のtestフォルダの中にあるindexファイルを読み込みます。

またviewヘルパー関数ではwith関数を利用することで、次のように第二引数に配列を指定せずにwith関数でテンプレートに渡すデータを指定することができます。

return view('index')->with('name', 'office54');

最後にテンプレートindex.blade.phpを作成します。テンプレートは「resources」フォルダ内の「views」フォルダに配置します。

テンプレートはコントローラーごとにフォルダを用意して、その中にコントローラーで利用するテンプレートをまとめるのが一般的です。しかし管理しやすい方法があれば、このルールに従わなくても大丈夫です。

index.blade.phpには次のように記述します。

Hello, {{ $name }}.

二重波括弧内にコントローラーなどから渡された変数を記述することで、変数の値が表示されます。また変数は頭に$マークを入れて利用します。

POINT

{{}}はPHPのhtmlspecialchars関数を通して送信されるため、XSS攻撃を防ぐ役割があります