Hokma School :: Course 2 Laravel

Laravel 04. Blade Templete

테디아저씨 2026. 4. 13. 23:10

 

Blade는 Laravel의 템플릿 엔진입니다.

 

1.  기본 사용방법

 

기본위치

resources/views

 

파일 확장자

.blade.php

 

변수의 출력

<h2>{{ $name }}</h2>

Lagacy PHP
<?php echo $name; ?>

 

 

2.  왜 blade 는 별도의 문법을 가지고 있는가?


1) 가독성

 

PHP

<?php if ($user) { ?>
<?php foreach ($items as $item) { ?>
<?php } ?>
<?php } ?>

 

BLADE

@if($user)
    @foreach($items as $item)
    @endforeach
@endif

 

 

2) HTML 중심 개발 가능

  • 마크업 중심
  • 협업 쉬움

 

3) 추가기능

- 권한

- 데이터가 없을때

@auth
..
@endauth

@guest
..
@endguest

@isset($data)
..
@endisset

@forelse($items as $item)
..
@empty
....
@endforelse

 

 

* * * * Huda * * * *

 

3.  블래이드 문법

 

1) 조건문

@if($memner_kind == "T")
    <p>선생님 입니다.</p>
@else
    <p>선생님이 아닙니다.</p>
@endif

 

@if($memner_kind == "T")
    <p>선생님 입니다.</p>
@elseif($memner_kind == "S")
    <p>학생 입니다.</p>
@else
    <p>Guest 입니다.</p>
@endif

 

2) 반복문

## for 기본 반복문
@for($i = 0; $i < 5; $i++)
    <p>{{ $i }}</p>
@endfor


## while
@php $i = 0; @endphp
@while($i < 5)
    <p>{{ $i }}</p>
    @php $i++; @endphp
@endwhile


# for, while 은 변수를 잘못쓰면 무한루프 위험이 있습니다.


## 실무에서 더 많이 사용됨
@foreach($posts as $post)
    <p>{{ $post->title }}</p>
@endforeach

## foreach 에서는 값이 있을때만 출력이 있기 때문에
## 사용자가 무슨 문제가 있는지 확인이 어렵다.

## 실제로는 아래 처럼 많이 사용한다.
@if(count($posts) > 0)
    @foreach($posts as $post)
        <p>{{ $post->title }}</p>
    @endforeach
@else
    <p>게시글이 없습니다</p>
@endif


## 실무에서 많이 쓰는 형태...
@forelse($posts as $post)
    <p>{{ $post->title }}</p>
@empty
    <p>게시글이 없습니다</p>
@endforelse

## 데이터 없으면 @empty 실행

 

 

3) 기타

# 값이 존재할때 ( 변수가 존재하고, null 이 아닐때 )
@isset($data)
    <p>데이터가 있습니다</p>
@endisset


@isset($user)
    <p>{{ $user->name }}</p>
@endisset


# Lagacy PHP
if (isset($user)) { 

}

 

 

4) 레이아웃 구성 (layout, section)

 

@extends @section  @yield

 

- 레이아웃 파일  views/layouts/app.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>My App</title>
</head>
<body>

<header>헤더</header>

@yield('content')

<footer>푸터</footer>

</body>
</html>

 

- 컨텐츠 파일  views/posts.blade.php

@extends('layouts.app')

@section('content')
    <h1>Board</h1>
    ...
    ...    
    ...
@endsection

 

 

 

- include 사용 

 

* layout 에서 include 사용 ( header . footer ) 부분을 따로 분리해줄수 있다.

<!DOCTYPE html>
<html>
<head>
    <title>My App</title>
</head>
<body>

@include('partials.header')

@yield('content')

@include('partials.footer')

</body>
</html>

 

* 자식 템플릿 @section 안과 밖에서도 사용 할 수 있습니다.

@extends('layouts.app')

@section('content')

<h1>Board</h1>

@include('board.skin')
.....
.....
.....
@endsection

 

@push  @stack

<!DOCTYPE html>
<html>
<head>
    <title>My App</title>
</head>
<body>

@include('partials.header')

@yield('content')

@include('partials.footer')

<script>
.....
</script>
@stack('javascript')
</body>
</html>

 

@extends('layouts.app')

@section('content')

<h1>Board</h1>


@push
<script>
.....
.....
.....
</script>
@endpush

@endsection

 

@extends → 부모 템플릿 상속

@section → 내용정의
@yield → 이부분에 내용이 교체

@push -> 내용정의
@stack -> 이부분에 내용이 누적

 

폴더 구조는 아래 처럼 구성하는 것을 추천합니다.

resources/views/
 ├── partials/
 │     ├── header.blade.php
 │     └── footer.blade.php
 ├── layouts/
 │     └── app.blade.php
 └── posts/
       └── index.blade.php

 

 

 

 

 

 

예시 ) 템플릿을 이용해서 실제 만들어 보면서 설명하겠습니다.

https://www.templatemonster.com/monsterone/free-download/?id=248666%EF%BB%BF

 

MonsterONE Free Download

 

www.templatemonster.com

 

템플릿으로 빠르게 개발할때

1) html  파일들은 /resources/views/  로 옮긴다.

2) 파일은 /resources/views/ 에서는 .blade.php 로 변경한다.

3) js, css 등은 경로를 접근할 수 있는 /public 에 옮긴다.

4) .blade.php 에서 js, css 의 경로를 확인한다.

5) 레이아웃을 분리한다.  -> 공통적인 영역처리

 

 

 

 

 

실습과 과제

  • 부트스트랩 템플릿을 blade 템플릿 구조로 만들어보기