시작하기
Blade는 Laravel에 포함된 단순하면서도 강력한 템플릿 엔진입니다. PHP의 일부 템플릿 엔진과 달리, Blade는 템플릿 내에서 순수 PHP 코드의 사용을 제한하지 않습니다. 모든 Blade 템플릿은 PHP 코드로 컴파일되어 캐시되므로, Blade는 애플리케이션에 거의 오버헤드를 추가하지 않습니다. Blade 템플릿 파일은.blade.php 확장자를 사용하며, 일반적으로 resources/views 디렉터리에 저장됩니다.
Blade 컴파일 플로우
.blade.php 파일이 어떻게 HTML 응답으로 변환되는지를 보여줍니다. 한 번 컴파일된 파일은 캐시되므로, 동일한 템플릿의 두 번째 이후 요청은 컴파일을 스킵합니다.
데이터 표시
Blade 뷰에 전달된 데이터를 표시하려면 변수를 이중 중괄호로 감쌉니다.Blade의
{{ }}는 자동으로 PHP의 htmlspecialchars 함수를 거쳐 XSS 공격을 방지합니다.이스케이프하지 않는 데이터 표시
이스케이프를 생략하려면{!! !!} 문법을 사용합니다.
JavaScript 프레임워크와의 공존
JavaScript 프레임워크도 중괄호를 사용하는 경우,@ 심볼로 Blade의 렌더링을 스킵시킵니다.
@는 Blade에 의해 제거되지만, {{ name }}은 그대로 브라우저에 전송되어 JavaScript 프레임워크에 의해 렌더링됩니다.
Blade를 중심으로 진행할지, Livewire나 Inertia로 넓힐지를 비교하고 싶다면 프런트엔드를 참조하십시오.
Blade 디렉티브
조건 분기(if 문)
@unless로 “~가 아니라면”이라는 조건도 쓸 수 있습니다.
@isset과 @empty를 사용합니다.
인증 디렉티브
Switch 문
루프
Blade는 루프를 다루기 위한 편리한 디렉티브를 제공합니다.@break와 @continue를 사용해 루프를 제어할 수 있습니다.
루프 변수
@foreach 루프 내에서는 $loop 변수를 사용해 루프에 관한 정보를 취득할 수 있습니다.
| 프로퍼티 | 설명 |
|---|---|
$loop->index | 현재의 루프 인덱스(0부터 시작) |
$loop->iteration | 현재의 루프 반복 횟수(1부터 시작) |
$loop->remaining | 남은 반복 횟수 |
$loop->count | 배열의 요소 수 |
$loop->first | 최초의 반복인가 |
$loop->last | 마지막 반복인가 |
$loop->even | 짝수 번째의 반복인가 |
$loop->odd | 홀수 번째의 반복인가 |
$loop->depth | 현재의 루프 중첩 깊이 |
$loop->parent | 중첩된 루프인 경우, 부모 루프의 변수 |
코멘트
Blade 코멘트는 렌더링된 페이지에 포함되지 않습니다.레이아웃
컴포넌트를 사용한 레이아웃
Laravel의 레이아웃 구축에는 Blade 컴포넌트를 사용하는 방법이 권장됩니다. 먼저 레이아웃 컴포넌트를 작성합니다.템플릿 상속을 사용한 레이아웃
고전적인 방법으로@extends, @section, @yield를 사용한 템플릿 상속이 있습니다.
부모 레이아웃의 정의:
@parent를 사용하면 부모 레이아웃의 @section 내용을 유지하면서 추가할 수 있습니다.서브 뷰의 인클루드
@include 디렉티브를 사용하면 Blade 뷰를 다른 뷰에 삽입할 수 있습니다.
부모 뷰에서 사용 가능한 모든 변수는 인클루드된 뷰에서도 사용 가능합니다.
폼의 CSRF 보호
web 라우트 파일에서 POST, PUT, PATCH, DELETE 요청을 보내는 HTML 폼에는 반드시 @csrf 디렉티브를 포함시켜 주십시오.
PUT, PATCH, DELETE 요청을 폼에서 보낼 경우 @method 디렉티브를 사용합니다.
Origin 검증이나
X-CSRF-TOKEN / X-XSRF-TOKEN 헤더를 포함한 실운용의 CSRF 대책은 CSRF 보호를 참조하십시오.정리
Blade 템플릿 엔진의 주요 기능을 정리합니다.데이터 표시
데이터 표시
{{ $variable }}으로 이스케이프 표시, {!! $variable !!}로 이스케이프 없는 표시.조건 분기
조건 분기
@if, @elseif, @else, @endif, @unless, @isset, @empty, @auth, @guest.루프
루프
@for, @foreach, @forelse, @while과 $loop 변수를 사용한 제어.레이아웃
레이아웃
컴포넌트 기반(
<x-layout>과 {{ $slot }}) 또는 템플릿 상속(@extends, @section, @yield).서브 뷰
서브 뷰
@include로 뷰를 재사용 가능한 파츠로서 삽입.