본문 바로가기
IT/PHP

PHP/Laravel(3) blade 문법

by Sungjun_ 2020. 2. 20.

1. @if

저번에 만든 index.blade.php에 아래와 같이 입력해 줍니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    @if ($a == 1)
        a는 1입니다.
    @elseif ($a == 2)
        a는 2입니다.
    @endif
</body>
</html>

그리고 web.php도 다음과 같이 입력해줍니다.

<?php

Route::get('/', function () {
    $a = 1;
    return view('index',compact('a'));
});

a 값을 1로 주었기 때문에 a는 1입니다가 화면에 출력됩니다.

a 값을 2로 주면 2로 출력됩니다.

 

물론  @else도 사용 가능합니다.

 

2. @foreach

index.blade.php를 아래와 같이 수정합시다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        @foreach ($index as $item)
            <li>{{$item}}</li>
        @endforeach
    </ul>
</body>
</html>

다음으로 web.php를 수정합니다.

 

<?php

Route::get('/', function () {
    $index = [
        '1',
        '2',
        '3',
        '4'
    ];
    return view('index',compact('index'));
});

$index 배열을 만들어 1,2,3,4를 넣고 index.blade에서 li로 출력하게 했습니다.

 

화면에 제대로 출력됩니다.

 

 

3. @forelse

@forelse는 @if와 @foreach의 결합이라고 생각하시면 됩니다.

 

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        @forelse ($index as $item)
            값은 {{$item}} 입니다.<br>
        @empty
            값이 없습니다.
        @endforelse
    </ul>
</body>
</html>
<?php

Route::get('/', function () {
    $index = [
        '1',
        '2',
        '3',
        '4'
    ];
    return view('index',compact('index'));
});

web.php는 바꾸지 않고 그대로 사용하겠습니다.

@forelse를 실행하면 현재 index 값이 있기 때문에 실행이 될 것입니다.

만약, 값이 없다면 @empty에 넣은 값이 없습니다. 구문이 실행됩니다.

 

저렇게 했을때 화면에는 값은 1입니다.  값은 2입니다. 값은 3입니다. 값은 4입니다.

이렇게 4개가 출력될 것입니다.

 

 

 

이전 강의에서 {{ }}가 php에서 <?= ?>와 같은 역할을 한다고 했습니다.

{{-- --}}이 표시는 자동으로 html 주석 처리 해주는 역할입니다.

또한, {{ }} 구문은 XSS 공격을 방지하기 위해서 자동으로 PHP의 htmlspecialchars 함수를 실행하게 됩니다.

 

 

 

다음으로는 블레이드에서 레이아웃 정의하는 방법입니다.

resources >> views 폴더 안에 master.blade.php 파일을 만들어 줍니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lalavel</title>
</head>
<body>
    @yield('content')
</body>
</html>

그리고 index.blade.php를 아래와 같이 수정해줍시다.

@extends('master')

@section('content')
    Hello~
@endsection

용어 설명 전에 이렇게 했을 시 화면에는 Hello가 출력됩니다.

 

이제 @extends, @yield, @section 용어를 보겠습니다.

먼저 @extends는 index.blade.php가 @master.blade.php를 상속한다는 뜻입니다. 

require이나 include로 파일을 가져오는 개념을 생각하시면 될 것 같습니다.

 

그리고 @yield와 @section은 한 묶음으로 생각하시면 되는데

이해를 돕기 위해 @yield와 @section을 몇 개 더 추가해보겠습니다.

 

master.blade.php입니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lalavel</title>
    @yield('style')
</head>
<body>
    @yield('content')
    @yield('strong')
</body>
</html>

 

index.php.blade 입니다.

@extends('master')

@section('style')
    <style>
        body{
            background: #2ecc71;
        }
    </style>
@endsection

@section('content')
    Hello~
@endsection

@section('strong')
    <h1>Hello</h1>
@endsection

결과화면 입니다.

 

@yield와 @section은 계속해서 만들 수 있고, 이름이 서로 짝을 이뤄야합니다.

 

 

위에 보시면 @section은 계속 @endsection으로 끝나는데

@section ~ @stop라는 것도 있습니다.

 

위 2개의 차이점은 

@section ~ @endsection은 master.blade.php에 섹션은 만드는 것이고

@section ~ @show는 index.blade.php 자체에 만든다고 생각하시면 됩니다.

또한, @section ~ @show는 master.blade.php에 @yield를 필요로 하지 않습니다.

 

index.blade.php만 수정해줍시다.

@extends('master')

@section('style')
    <style>
        body{
            background: #2ecc71;
        }
    </style>
@endsection

@section('strong')
    <h1>Hello</h1>
@endsection

@section('content')
    Hello~
@endsection

@section('side')
    <p>side</p>
@show

 

가장 아래 @section~@show를 추가했고 master.blade.php에 따로 @yield('side')를 주지 않았습니다.

 

그랬을 때 side가 출력 되는 것을 볼 수 있고, @section~@endsection으로 정의한 것들 보다

먼저 출력되는 것을 볼 수 있습니다.

 

마지막으로 @include입니다.

@include를 사용해 master.blade.php와 index.blade.php 등 어디에도 넣어 사용할 수 있습니다.

 

views 폴더에 include.blade.php를 만들어주고 

<h2>footer</h2>

간단하게 이렇게만 입력 입력해줍니다.

그리고 master.blade.php와 index.blade.php에 각각 @include('include')를 입력해줍니다.

'  ' 사이에는 파일 이름이 들어가야합니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lalavel</title>
    @yield('style')
</head>
<body>
    @yield('content')
    @yield('strong')
    @include('include')
</body>
</html>
@extends('master')

@section('style')
    <style>
        body{
            background: #2ecc71;
        }
    </style>
@endsection

@section('strong')
    <h1>Hello</h1>
@endsection

@section('content')
    Hello~
@endsection

@section('side')
    <p>side</p>
@show

@include('include')

가장 처음 나오는 footer가 index.blade.php의 @include이고

마지막에 나오는 footer가 mater.blade.php의 @include입니다.

'IT > PHP' 카테고리의 다른 글

PHP/Laravel(5) 컨트롤러  (0) 2020.02.21
PHP/Laravel(4) 컴포넌트&슬롯  (0) 2020.02.20
PHP/Laravel(2) welcome.blade.php  (0) 2020.02.19
PHP/Laravel(1) 설치하기  (0) 2020.02.19
PHP(11) 리뷰 수정, 삭제  (0) 2020.02.19

댓글