Page tree

템플릿 레이어에서도 제어문을 사용할 필요성이 있으며 예를 들어보면 사용자 메뉴를 출력하는 템플릿 코드에서 로그인을 안 한 사용자의 경우 "로그인" 메뉴를 표시하고 로그인이 되었다면 "프로필" 메뉴를 표시하는 경우가 있습니다.

 

블레이드 템플릿은 조건에 따라 다른 데이타를 표시하기 위해 여러 가지 제어 기능을 제공합니다.

조건문

주어진 입력이 5 보다 큰지 여부를 판별해 주는 웹 페이지를 만들어 보겠습니다. 먼저 routes.php 에 다음 라우트를 추가합니다. 

app/Http/routes.php
Route::get('calc/{num}', function($num) {
	return view('calc')->with('num', $num);
});

 

기존 PHP 는 다음과 같이 PHP 의 제어문과 출력을 위한 HTML 을 같이 사용하므로 코드가 복잡하고 가독성이 떨어졌습니다. 

resources/views/calc.php
<?php if ($num > 5) : ?>
 <p> <?= $num ?> 는 5 보다 큽니다.</p>
<?php else : ?>
 <p> <?= $num ?> 은 5보다 작습니다.</p>
<?php endif; ?>

if, else 뒤에 : 가 붙은 것은 제어 구조의 대체 문법(Control Structures alternative syntax)으로 여는 괄호와 닫는 괄호를 써야 하는 기존의 if { }를 대체하는 문법입니다.

만약 기존 문법으로 작성한다면 아래와 같이 <? 에 괄호를 같이 써주어야 하는데 복잡한 코드에서는 가독성이 떨어지고 실수할 여지가 많습니다.

<?php if ($num >= 5) { ?>
 <p> <?= $num ?>는 5 보다 큽니다.</p>
<?php } else { ?>

 

더 자세한 내용은 http://php.net/manual/kr/control-structures.alternative-syntax.php 를 참고하세요.

 

이제 블레이드로 위 내용을 작성해 보겠습니다.

resources/views/calc.blade.php
@if ($num > 5)
 <p> {{ $num }} 는 5 보다 큽니다.</p>
@else
 <p> {{ $num }} 은 5보다 작습니다.</p>
@endif

 

코드가 훨씬 간결해지고 미려해진 것을 알 수 있습니다.

웹 브라우저로 http://homestead.app/calc/2 에 연결하여 결과를 확인해 보겠습니다.

결과 화면

만약 조건문이 더 늘어 나야 한다면 다음과 같이 @elseif 구문을 사용할 수 있습니다.

resources/views/calc.blade.php
@if ($num > 5)
 <p> {{ $num }} 는 5 보다 큽니다.</p>
@elseif ($num == 5)
 <p> {{ $num }} 는 5 와 같습니다.</p>
@else
 <p> {{ $num }} 은 5보다 작습니다.</p>
@endif

PHP 의 코딩 스타일 표준인 PSR-2 에서는 else if 구문 대신 elseif 를 사용하도록 하고 있으므로 조건문을 작성할 때 elseif 를 사용하는 습관을 들이는 게 좋습니다.

if (!) 같은 부정문을 사용해야 할 경우 대신 unless 를 사용할 수 있습니다. 예로 로그인을 하지 않았을 경우 특정 처리를 할 경우 unless 구문으로 다음처럼 처리할 수 있습니다.

resources/views/unless.blade.php
@unless (Auth::isSigned())
    로그인이 필요합니다.
@endunless 

 

Loop

DB 에서 가져온 데이타를 표로 표시하는등 뷰에서는 복수의 데이타를 루프를 돌면서 처리해야 할 경우가 많습니다. 블레이드에서는 PHP 의  foreach와 for, while 루프를 사용할 수 있으며 제어문과 마찬가지로 키워드 앞에 @ 를 붙여주면 됩니다.

 

다음은 할 일의 목록을 만들고 뷰를 호출하는 라우트 설정입니다.

app/Http/routes.php
Route::get('task/list2', function() {
	$tasks= [ 
		['name' => 'Response 클래스 분석', 'due_date' => '2015-06-01 11:22:33'],
		['name' => '블레이드 예제 작성', 'due_date' => '2015-06-03 15:21:13'],
	];	
	return view('task.list2')->with('tasks', $tasks);
});

 

이제 resouces/views/task/list2.blade.php  파일을 만들고 전달받은 데이타를 출력하는 뷰를 만들어 보겠습니다.

기존 PHP 코드와 차이점은 foreach 앞에 블레이드 키워드라는 표시로 @ 를 붙이고 출력을 {{ }} 로 해야 하는 것만 다르며 블레이드 제어문은 괄호로 종료하지 않으므로 @endforeach 로 foreach 구문 종료를 선언해주면 됩니다.

resouces/views/task/list2.blade.php
@foreach ($tasks as $task)
	<p> 할 일: {{ $task['name'] }}, 기 한: {{ $task['due_date'] }} </p>
@endforeach

위 코드는 @for 구문을 사용하여 아래와 같이 바꿔 쓸수 있으며 @for 구문의 종료는 @endfor 를 사용해야 하는 점을 주의하십시요.

resouces/views/task/list2.blade.php
@for ($i = 0; $i < count($tasks); $i++)
    <p> 할 일: {{ $tasks[$i]['name'] }}, 기 한: {{ $tasks[$i]['due_date'] }} </p>
@endfor

루프를 돌면서 배열 데이타를 처리할 경우 foreach 구문이 for  보다 훨씬 간결하다는 것을 알수 있습니다.