Laravel

[Laravel] 라라벨 블레이드 템플릿 문법 기초

까뮈_b 2021. 11. 23. 23:02

블레이드는 라라벨에서 제공하는 템플릿 엔진이다. 한마디로, "MVC패턴에서 view파일을 구성하고 표현하기 쉽게 만든 라라벨이 제공하는 템플릿"이 바로 "블레이드"이다.

블레이드 파일은 파일명.blade.php형식의 확장자 형태를 가지며, 주로 resources/view 폴더 아래에 위치하여 사용한다.

 

블레이드 템플릿 문법은 간단하고 직관적이어서 러닝 커브가 상대적으로 낮다. 기존 php 문법에 익숙한 개발자라면 기초적인 사용 방법만 익혀두고 몇 번 써보면 쉽게 익숙해질 수 있을 것이다. 그럼 블레이드의 기초 문법을 알아보자.

 

공식문서에는 템플릿 상속을 이용한 레이아웃 확장 부분부터 나오는데, 상속과 섹션 정의로부터 얻는 얻는 편리함이 바로 블레이드의 가장 큰 장점이기 때문에 그런 것 같다. 하지만 가장 처음 눈에 띄이는 부분은 바로 데이터 표시 방법(데이터 보간법)일 것이다.

 

데이터 보간

블레이드에선 데이터 표시를 위해 {{ }} 형태의 이중 중괄호를 사용한다. 

Hello, {{ $name }}.

블레이드에서 {{ $name }} 은 php문법에서 <?=$name> 과 같다.

다만, 블레이드의 {{ }} 표현에서는 XSS(cross-site-scripting) 공격으로부터 보호하기 위해 자동으로 php의 htmlspecialchars함수를 실행하기 때문에 &, <,>,"",''같은 특수문자나 문장부호가 이스케이프 처리되어 표시된다.

 

 

부득이 이스케이프 처리를 거치지 않고 데이터를 표시하려면, 아래 코드처럼 중괄호 하나와 느낌표 두 개로 감싸면 된다.

Hello, {!! $name !!}.

 

많은 자바스크립트 프레임워크에서도 이중 중괄호 {{ }} 표현을 사용하기 때문에,

라라벨의 {{ }} 표현과 구분하기 위해서 앞에 @를 붙인, @{{ $name }} 형태로 표현하게 되면,

블레이드 렌더링 엔진은 @는 알아서 지워버리고, @뒤에 붙은 {{ $name }}부분은 렌더링하지 않고 지나친다.

렌더링 되지 않고 남은 {{ $name }} 는 뒤이은 자바스크립트 프레임워크에 의해 렌더링 되거나, {{ $name }} 형태 그대로 화면에 출력된다.

Hello, @{{ name }}.

 

 

주석

{{-- blade에서는 {{-- 주석내용 --}} 형식으로 주석 처리를 한다. --}}

blade 주석은 html주석과는 달리, 어플리케이션이 반환하는 html에 포함되지 않기에 개발자도구 등으로 클라이언트단에서 보는 것이 불가능하다.

 

 

조건문과 반복문

블레이드에서는 조건문과 반복문 등 각종 제어문을 @if @endif @for @endfor 처럼 제어표현 앞에 @를 붙인 형태로 선언하여 제어문의 로직이 위치할 공간을 열고 닫아, 컨트롤 구조를 구성할 수 있다. 덕분에 중괄호,<?= , <? 가 수없이 뒤섞여있는 헷갈리를 구조를 벗어나, 직관적인 컨트롤 구조를 구성할 수 있으며 코드가 한 층 간결해졌다.

 

조건문

@if (count($apple) === 1)
    사과를 하나 가지고 있다.
@elseif (count($apple) > 1)
    사과를 여러개 가지고 있다.
@else
    사과를 가지고 있지 않다.
@endif

 

 

반복문

@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

 

 

블레이드에서는, 위의 if문 for문 외에도 switch case문, 인증관련 지시어로서 @auth, @guest , php문법에서 <?php 와 같은 역할을 하는 @php @endphp 를 포함한 수많은 제어문 구조를 직관적으로 구성할 수 있다.

 

더 다양하고 자세한 블레이드 문법은 laravel 공식 문서 또는 공식 문서의 한글판 번역 사이트인 라라벨코리아를참고하도록 하자.