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 |
댓글