見出し画像

Laravel 学習記録 #017 view Bladeテンプレートを学ぶ

LaravelのBladeテンプレートについて学習したものをまとめてます。
ざっくりです。実践編はまた別でまとめます。

Bladeテンプレートとは

  • Laravelに組み込まれているテンプレートエンジン

  • ファイルの拡張子は「.blade.php」

  • Bladeビューは、ルートまたはコントローラから返される(viewヘルパ)

  • Bladeの構文を使ってPHPのコードがかける

  • コンポーネントに分離も可能

Bladeの機能や構文

よく使う系

変数出力

エスケープして出力
{{ $str }}

エスケープしない場合
{!! $str !!}

改行出力
{!! nl2br(e($str)) !!}


{{}}を文字列として扱う
@{{}}

{{ }} を使うことで、XSS攻撃を防ぐために、PHPのhtmlspecialchars関数を通して自動的に通してくれています。
エスケープなしにするには{!! !!}を使います。
改行ありの表示の場合、改行文字を<br>タグに変換するための、nl2br関数と、エスケープ処理のe関数を使ったりします。

{{}}を文字列として扱いたければ、頭に@をつければOK


ディレクティブ

@〜のやつ
構文のようなもので、以下のようにいろんな機能がある

{{-- php --}}
@php
@endphp

{{-- if --}}
@if (条件式)
@endif

{{-- for --}}
@for ($i = 0; $i < $count; $i++)
@endfor

{{-- foreach --}}
@foreach ($collection as $item)
@endforeach

{{-- switch --}}
@switch($type)
    @case(1)
        
        @break
    @case(2)
        
        @break
    @default
        
@endswitch


{{-- レイアウト継承 --}}
@extends('layout')

{{-- 他のbladeファイルを組み込み --}}
@include('hoge.fuga')

まだまだあるので、phpのこの機能使いたいなって思ったらとりあえずマニュアル確認していこうと思います。

ファイルの分割

webアプリの場合、各画面に共通のレイアウトやパーツが出てくることがほとんどですよね。
Laravelではパーツの分割について、以下の2パターンで対応できます。
・ディレクティブを使ったレイアウトの分割
・Bladeコンポーネント


ディレクティブを使ったレイアウト

親ファイルでは、@yieldディレクティブを使って子ファイルの内容が挿入される場所を決めます。
子ファイルでは@extendsディレクティブで親テンプレートを指定し、@sectionディレクティブで親テンプレート内の特定のセクションの内容を用意します。

別のBladeファイルを呼び出す場合は、@includeディレクティブを使用します。

Bladeコンポーネント

コンポーネントとなるファイルはresources\views\componentsディレクトリに作成します。
親ファイルでは、{{ $slot }}を使って子ファイルの内容が挿入される場所を決めます。($slotの他に名前付きスロットも可能)
子ファイルでは、<x-component>(componentは使用するファイル名)形式のタグを使うことでコンポーネントが使用できます。

別のBladeコンポーネントを呼び出す場合も、<x-component>で使用可能です。


この記事が気に入ったらサポートをしてみませんか?