Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Raspberry Pi
- 우분투 20.04
- 라라벨
- 업비트
- 20.04
- 프레임워크
- 코드이그나이터
- ubuntu
- 맥
- upbit
- 회고
- codeigniter
- 옵티머스 g
- FMS
- 옵G
- 옵지
- Laravel
- 라즈비안
- TiL
- C
- 옵티머스g
- 라즈베리파이
- Ubuntu 20.04
- 셀레니움
- MySQL
- 맛집
- 제주도
- 우분투
- php
- Selenium
Archives
- Today
- Total
평범한 이야기들
[TIL] PHP Laravel - Blade (블레이드) 본문
728x90
Blade
라라벨에서는 블레이드(Blade) 템플릿 엔진을 사용
블레이드는 중괄호를 사용해 출력하고 @를 접두사로 붙여 사용하는 지시어라는 커스텀 태그 문법을 사용
기본 출력
{{ $greeting }} // 내부적으로 <?php=htmlentities($greeting)?>과 동일
{!! $greeing !!}} // 있는 그대로 출력
{{}} 문법은 프런트엔드 템플릿 엔진의 구문과 비슷함
따라서 @{{ 로 시작하는 문법은 블레이드에서 무시하도록 설계되어있어 해당 문법으로 사용하면 된다.
// $bladeVarible 값이 그대로 출력
{{$bladeVarible}}
// 화면에{{frontVariable }} 이 그대로 출력된
@{{ frontVariable }}
제어구조
// 조건문
@if ($itemCount = count($items))
<p> {{ $itemCount }} 종류의 과일이 있습니다. </p>
@else
<p> 아무것도 없습니다.! </p>
@endif
@unless(조건식) = @if(! 조건식)
반복문
// for 문법
@for ($i = 0; $i < count($collection); $i++)
<li>{{$i}}</li>
@endfor
// while 문법
@while ($item = array_pop($collection))
{{$item->name()}}<br>
@endwhile
// foreach 문법
@foreach ($collection as $item)
<li>{{$item}}</li>
@endforeach
// foreless 문법
@forelse ($collection as $item)
{{-- $collectionrk 비어 있지 않은 경우 아래코드 실행 --}}
<li>{{$item}}</li>
@empty
{{-- $collectionrk 비어 있는 경우 아래코드 실행 --}}
<li> 아무것도 없습니다. </li>
@endforelse
@foreach @forelse 안에서 사용할 수 있는 $loop 변수 존재 ( 기존 PHP에서는 제공해주지 않는다.)
- index : 반복문 안에서 현재 아이템의 인덱스 (0을 기본)
- iteration : 반복문 안에서 현재 아이템의 인덱스 (1을 기본)
- remaining : 반복문 안에 남아 있는 아이템 갯수
- count : 반복문 안에 있는 전체 아이템 갯수
- first : 반복문 안에서 현재 처리하는 아이템이 첫 번째 아이템인지 여부(true/false)
- last : 반복문 안에서 현재 처리하는 아이템이 마지막 아이템인지 여부(true/false)
- even : 반복문 안에서 현재 처리하는 아이템이 짝수 번째 아이템인지 여부(true/false)
- odd : 반복문 안에서 현재 처리하는 아이템이 홀수 번째 아이템인지 여부(true/false)
- depth : 반복문이 중첩되어 있을 때, 얼마나 깊이 있는지 계층을 나타내는 값 (첫 번째 반복문 = 1, 그 안에 중첩된 반복문 = 2)
- parent : 반복문이 중첩되어 있을 때 상위 @foreach 반복문에 대한 참초, (중첩이 되어있지 않으면 null)
주석
{{-- 블레이드 주석 --}}
해당 주석을 쓰면 랜더링 될때 처리가 되지 않아 html 에 포함되지 않음 (노출안됨)
템플릿 상속
// layouts/master.blade.php
<!DOCTYPE html>
<html lang="en">
<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>라라벨 입문</title>
</head>
<body>
@yield('content')
</body>
</html>
// welcome.blade.php
// master.blade.php 를 상속받는다.
@extends('layouts.master')
// 마스터에 있는 content 영역의 내용.
@section('content')
<p> 저는 자식 뷰의 'content' 섹션입니다.
@endsection
섹션은 여러개 만들수 있다.
// style, script 등을 추가로 넣어서 해주어도 된다.
// layouts.master.blade.php
<!DOCTYPE html>
<html lang="en">
<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>라라벨 입문</title>
@yield('style')
</head>
<body>
@yield('content')
@section('script')
<script src="app.js"></script>
@endsection
</body>
</html>
// index.blade.php
@extends('layouts.master')
@section('style')
<style>
body { background:skyblue; color: white;}
</style>
@endsection
@section('content')
<p> 저는 자식 뷰의 'content' 섹션입니다.
@endsection
@section('script')
@parent
<script src="lib.js"></script>
@endsection
// script 와 같이 조각뷰의 script와 겹치게 되면 순서가 꼬이게 된다.
// 그럴때 @parent 키워드 이용해 순서를 부모의 script 섹션 영역부터 실행되게 해준다.
// 쓰지 않으면 부모의 script 는 무시되게 된다.
@parent 지시어는 상속받을 script 섹션을 오버라이딩이 아닌 기존 값에 추가하는 것
@parent를 지정하지 않으면 오버라이딩
@include 지시어는 다른 템플릿을 포함하는 방법
// partials/footer.blade.php
<footer>
<p> 저는 Footer 영역입니다. 다른 뷰에서 저를 호출해 씁니다.
</footer>
// 삽입.
@section('content')
<p> 저는 자식 뷰의 'content' 섹션입니다.
@include('partials.footer')
@endsection
@includeIf, @includeWhen @includeFirst 등 다양한 지시어가 존재
@stack 지시어를 통해 내용을 밀어넣는 방법이 존재
// resources/views/layouts/app.blade.php
<html>
<head><!--헤드부분--></head>
<body>
<!-- 페이지 부분-->
<script src="/css/app.css"></script>
<!-- 필요한 스크립트 추가되어 출력 -->
@stack('script')
</body>
</html>
// resources/views/test.blade.php
@extends('layouts.app')
@push('script')
<!-- 스택 영역에 노출할 test.css 파일 추가 (***하단에 추가***)-->
<script scr="/css/test.css"></script>
@endpush
// resources/views/test2.blade.php
@extends('layouts.app')
@prepend('script')
<!-- 스택 영역에 노출할 test2.css 파일 추가 (***상단에 추가***)-->
<script scr="/css/test2.css"></script>
@endprepend
컴포넌트와 뷰 컴포저와 서비스 주입, 커스텀 블레이드 지시어는 추후에 다시 공부
728x90
Comments