블레이드
라라벨의 템플릿 언어인 동시에 HTML 컴파일 엔진이다.
블레이드 문법으로 쓴 템플릿은 .blade.php 확장자를 가져야 하며,
resources/views 디렉터리 아래에 저장해야 한다.
변수를 이용한 문자열 보간
resources/views/welcome.blade.php
<h1>{{ $greeting or 'Hello' }} {{ $name or '' }}</h1>
블레이드는 문자열 보간을 위해 이중 중괄호{{ }}를 이용한다.
{{ $name }}은 <?= $name;?> PHP 문법과 같다.
{{ $greeting or 'Hello' }}는 <?= isset($greeting) ? "{$greeting}" : 'Hello'; ?>와 같다.
블레이드는 XSS(cross-site scripting) 공격으로부터 서비스를 보호하기 위해 문자열을 보간할 때 특수 문자를 이스케이프(escape)한다. 이스케이프하지 않은 채로 문자열을 뷰에 포함하려면 {!! var !!}문법을 이용한다.
블레이드 내의 자바스크립트에서 문자열 보간을 사용한다면 @{{}} 문법을 써야 한다.
주석
블러드에서 주석은 {{--주석--}} 형식을 사용한다.
**브라우저에서 코드의 실행결과를 보는법 Mac용 크롬 Cmd + Opt + u
제어구조
블레이드는 모든 제어 구조에 이메일 기호(@)를 이용하고, end로 시작하는 키워드로 제어 구조의 끝을 표시한다.
조건문
@if($itemCount = count($item))
@elseif/@else
@endif
그리고 PHP에 없는 @unless(조건식)도 쓸 수 있다. if(! 조건식)과 같다.
반복문
<ul>
@foreach($items as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
또한, @foreach뿐만 아니라 @for, @while도 사용할 수 있다.
그리고 PHP에는 없는 @forelse라는 특수한 제어 구조가 있다
@forelse는 @if와 @foreach의 결합이다.
뷰로 넘어온 배열에 값이 있으면 @forelse를 타고,
그렇지 않으면 @empty를 탄다.
템플릿 상속
'중복 제거'는 개발자에게 숙명과도 같은 일이다. 가령 모든 뷰페이지마다 HTML 헤더와 네비게이션 메뉴를 추가해야 하는데,
뷰 페이지와 수가 전부 천 개인 상황이라면 복사 붙여넣기로 HTML헤더와 네비게이션 메뉴를 추가하는 방식으로 개발한다면
두 가지 문제가 있다.
1. 공통된 부분에 변경이 필요하면 페이지 천 개를 일일이 수정해야 한다.
2. 페이지 천 개의 공통 부분이 모두 같다고 확신할 수 없다.
resources/views/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>Document</title>
</head>
<body>
@yield('content');
</body>
</html>
resources/views/welcome.blade.php
@extends('layout.master');
@section('content');
<p>저는 자식 뷰의 'content' 섹션입니다.</p>
@endsection
마스터 레이아웃의 @yield('content') 부분인데, 나를 상속받는 자식이 가진 content라고 이름 붙인 섹션의 내용을 여기에 출력하겠다는 의미이다.
자식뷰의 첫 줄에는 @extends('layouts.master')가 있는데, '이 파일은 resources/views/layouts 디렉터리 아래에 있는 master.blade.php라는 부모를 상속한다'는 뜻이다.
'SKILL > LARAVEL' 카테고리의 다른 글
일반 php로 알아보는 페이지나누기 원리! (0) | 2017.11.23 |
---|---|
뷰와 데이터 바인딩 (0) | 2017.11.21 |
라우팅 (0) | 2017.11.21 |
라라벨 설치 (0) | 2017.11.21 |
개발 환경 준비-for MAC (0) | 2017.11.21 |