【Laravel】テンプレートエンジンのBladeとは:基本的な使い方
2023.10.01 /
本記事ではPHPフレームワークのLaravelにおける、テンプレートエンジンのBladeについて詳しく解説していきます。
BladeとはLaravelに備わっているテンプレートエンジンの1つであり、Webページを効率的にレイアウトするための様々な機能を備えています。
LaravelでのWebアプリケーション開発では必須の知識です。本記事を通してBladeの基本的な使い方について理解を深めてください。
Blade
Bladeとは
Laravelは「Blade」という高機能なテンプレート機能を備えています。Blade(ブレード)とは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 }}.
二重波括弧内にコントローラーなどから渡された変数を記述することで、変数の値が表示されます。また変数は頭に$マークを入れて利用します。
{{}}はPHPのhtmlspecialchars関数を通して送信されるため、XSS攻撃を防ぐ役割があります