정상우
hELLO.
정상우
전체 방문자
384,511
오늘
130
어제
1,174
  • hELLO. (121)
    • 컴퓨터과학 (4)
      • 알고리즘 & 자료구조 (4)
    • 언어 & 프레임워크 (63)
      • Go (23)
      • PHP & Laravel (40)
    • 웹 (7)
    • 블록체인 (12)
      • 메인넷 (9)
      • 암호화폐 플랫폼 (3)
    • 포트폴리오 (10)
    • 칼럼 (20)
      • 에세이 (4)
      • 개발자스럽게 살기 (14)
      • 회고 (2)
    • 티스토리 (5)

블로그 메뉴

  • ⚡ 개발자 이력서
  • 🌟 깃허브
  • 💻 강의
  • ✨ 예제코드
  • ⭐ 브런치
  • 태그 클라우드
  • 방명록

공지사항

  • 2차 도메인을 설정했습니다 ✨

인기 글

  • JWT(JSON Web Token)의 개념부⋯
    2021.07.29
    JWT(JSON Web Token)의 개념부⋯
  • 'REST' 를 보다 'RESTful' 하게⋯
    2021.08.14
    'REST' 를 보다 'RESTful' 하게⋯
  • [Laravel] 라라벨 프레임워크⋯
    2021.06.10
    [Laravel] 라라벨 프레임워크⋯
  • 깃허브를 포트폴리오로 쓰려면⋯
    2021.12.25
    깃허브를 포트폴리오로 쓰려면⋯
  • 암호화폐 트레이딩 봇을 만들었⋯
    2021.05.12
    암호화폐 트레이딩 봇을 만들었⋯

태그

  • php
  • go
  • 블록체인
  • 포트폴리오
  • 개발
  • 라라벨
  • 프로그래머스
  • Algorithm
  • 코딩테스트
  • 개발 리뷰

최근 댓글

  • 고맙습니다 ~^^
    정상우
  • 오늘 블로그 만들었는데 검색하⋯
    엥뿌삐
  • 좋은 스킨 정말 감사드립니다.⋯
    이태홍
  • 고맙습니다 ㅎㅎ
    정상우
  • 제가 원하던 최고의 스킨입니다⋯
    _HEON

최근 글

  • 빠르게 성장하는 개발자의 세⋯
    2022.06.08
    빠르게 성장하는 개발자의 세⋯
  • 개발자와 엔지니어, 그 사이에서
    2022.05.10
    개발자와 엔지니어, 그 사이에서
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.03
    아임포트(Iamport)로 결제기능⋯
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.01
    아임포트(Iamport)로 결제기능⋯
  • [Laravel] 카페24 호스팅에 라⋯
    2022.03.29
    [Laravel] 카페24 호스팅에 라⋯

티스토리

hELLO · Designed By 정상우.
정상우

hELLO.

언어 & 프레임워크/PHP & Laravel

[Laravel] 라라벨 블레이드 템플릿 (보간, 조건문, 반복문)

2021. 6. 24. 15:13

라라벨은 풀스택 프레임워크이기에 프론트엔드도 어느정도 개발할 수 있고, 뷰나 리액트같은 SPA(Single Page Application) 프레임워크를 사용할 수도 있다. 그러한 프레임워크를 사용하여 컴포넌트를 사용하기 위한 기반 템플릿이 있는데, 라라벨의 블레이드 템플릿이 그러하다. PHP는 언어이면서 자체적으로 템플릿의 역할도 겸할 수 있는데, 블레이드는 템플릿의 역할을 보다 강화시킨 것이다. 많이 알려져 있는데 PHP 템플릿인 Twig, Mustache 랑 같은 개념이다.

블레이드 템플릿

블레이드 템플릿은 라라벨에서 프론트엔드 마크업 및 컴포넌트를 포함하고 작성하기 위한 템플릿이다. 일반적인 PHP 템플릿처럼 if, for 와 같은 제어구조를 사용할 수도 있고, 다른 템플릿을 상속받고 슬릇(Slot)과 같은 개념을 통해 부모 템플릿에 마크업을 삽입할 수도 있다. 이러한 개념들은 사뭇 프론트엔드 프레임워크 중 하나인 Vue.js 와 비슷한 느낌을 주기도 한다.

보간

템플릿에 데이터를 바인딩할 때에는 다른 프레임워크에서 많이본 것처럼 {{ }} 를 사용할 수 있다. 이는 <?= ?> 를 사용한 것과 비슷하지만 완전히 동일하지는 않다. 일부 문자에 대해 이스케이프를 처리하기 때문이다. 만약 이스케이프 처리하지 않는다면 XSS(Cross Site Scripting)과 같은 공격을 당할 위험이 크다.

{{ $variable }}

위와 같은 코드를 일반적인 PHP 에서 기능적으로 똑같이 구현한다면 아래와 같다.

<?=htmlentities($variable)?>

만약 이스케이프 처리를 하고 싶지 않다면, {!! !!} 를 사용할 수 있다. 이를 사용할 때는 주의해야 한다. 보안에 문제가 생길 수 있기 때문에 남용하면 안 된다. 또한 {{ }} 를 문자 그대로 출력하고 싶다면 @{{ }} 와 같이 @ 를 붙여서 사용하면 된다.

조건문

PHP 에서 if 문을 사용하듯 블레이드에서 사용할 수 있는데, 이러한 지시어(Directive)를 사용할 때는 @ 를 붙여서 사용한다. 블레이드에게 조건문은 @if, @elseif, @else, @endif 로 사용한다. 이는 마치 PHP 에서 제공하는 대체 문법(Alternative Syntax)과 사용법이 비슷하다고 볼 수 있다.

@if

@if(true)
  Hello, world
@elseif(false)
  Who are you?
@else
  Bye
@endif

@unless

또 한 가지, @unless, @endunless 가 있는데, 나도 그렇지만, 조건문에 ! 연산자를 사용하여 bool 에 대한 결과를 반전하여 조건처리를 하는 것에 거북함을 느낀다. 조건문에는 옳은 경우에 대해서 처리를 하게하는 것이 더 깨끗한 코드가 되기 때문이다. 따라서 @if !false 로 처리하는 것을 대신하여 @unless false 로 처리할 수 있다. 개인으로는 환영할만한 문법이다.

@unless(false)
  Hello, world
@endunless

반복문

반복문을 처리할 때도 마찬가지로 @for, @foreach, @while 을 사용할 수 있다. 그에 맞게 짝꿍으로 @endfor, @endforeach, @endwhile 이 존재한다. Go 또한 주가 되는 언어로 삼고 있는 내게 반복문이 여러개 있는 것은 그다지 좋아하지 않는다. 그저 for 문 하나만 있어도 되니까 말이다. 추가적으로 @forelse 도 존재한다. 

@for

@for 지시어를 사용하면 클래식한 일반적인 for 을 사용하기 위한 것이다.

@for($i = 0; $i < count($messages); $i++)
  {{ $messages[$i] }}
@endfor

@foreach

Traversable 인터페이스를 만족하는 객체 또는 배열을 순회하기 위해 @foreach 를 사용할 수 있다.

@foreach($messages as $message)
  {{ $message }}
@endforeach

@while

@while($message = array_pop($messages))
  {{ $message }}
@endwhile

@forelse

@forelse 는 기본적으로는 @foreach 와 동일하지만, 배열이 비어있을 때 @empty 지시어를 통해 별도의 행동을 취할 수 있다는 점이 다르다.

@forelse($messages as $message)
  {{ $message }}
@empty
  Messages is empty
@endforelse

$loop 변수 사용하기

$loop 변수는 @foreach, @forelse 내부에서 사용하며 루프에 대한 추가적인 정보를 가지고 있다. 이는 stdClass 타입이고, 예를 들어 $loop->index 는 현재 인덱스 정보를 담고있다. @foreach 에서는 인덱스와 같은 정보에 접근하려면 다소 귀찮았기 때문에 이러한 추가적인 정보를 제공하는 변수가 있다면 사용하기 유용할 것/이다. iteration, count 와 같은 프로퍼티들이 존재하는데, 조금 더 자세한 내용은 https://tutsforweb.com/loop-variable-foreach-blade-laravel/ 를 참고해보자.

더 읽을거리

https://laravel.com/docs/8.x/blade

https://laravel.kr/docs/8.x/views

    '언어 & 프레임워크/PHP & Laravel' 카테고리의 다른 글
    • [Laravel] 라라벨 데이터베이스와 모델 (쿼리빌더, 옐로퀸트)
    • [Laravel] 라라벨 블레이드 템플릿 (상속, 컴포넌트, 슬릇)
    • [Laravel] 라라벨 라우팅과 컨트롤러
    • [Laravel] 라라벨 개발환경 구축하기 (feat. 홈스테드, 도커)
    라라벨, 블레이드
    정상우
    정상우
    과거의 배움으로 현재를 바꾸고 미래를 만듭니다. #25+2살 #INFJ #개발자 #브런치작가
    댓글쓰기
    다음 글
    나는 'K' 코딩 테스트가 싫어요
    이전 글
    [Laravel] 라라벨 라우팅과 컨트롤러
    • 이전
    • 1
    • ···
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • ···
    • 121
    • 다음

    티스토리툴바