수색…
소개
Laravel은 Blade 템플릿 엔진을 지원합니다. 블레이드 템플릿 엔진을 사용하면 마스터 템플릿과 자식 템플릿을 마스터 템플릿에서로드 할 수 있으며 블레이드 파일 내에 변수, 루프 및 조건문을 포함 할 수 있습니다.
조회수 : 소개
MVC 패턴의 뷰에는 데이터를 사용자에게 표시하는 방법 에 대한 논리가 포함되어 있습니다. 웹 응용 프로그램에서 일반적으로 각 응답을 통해 사용자에게 다시 전송되는 HTML 출력을 생성하는 데 사용됩니다. 기본적으로 Laravel의보기는 resources/views
디렉토리에 저장됩니다.
view
헬퍼 함수를 사용하여 view
호출 할 수 있습니다.
view(string $path, array $data = [])
도우미의 첫 번째 매개 변수는 뷰 파일의 경로이며 두 번째 매개 변수는보기에 전달할 선택적 데이터 배열입니다.
따라서 resources/views/example.php
를 호출하려면 다음을 사용하십시오.
view('example');
resources/views/parts/header/navigation.php
와 같은 resources/views
디렉토리 내의 하위 폴더에있는 파일보기는 점 표기법을 사용하여 호출 할 수 있습니다. view('parts.header.navigation');
resources/views/example.php
와 같은 뷰 파일 내에서 HTML과 PHP를 함께 포함 할 수 있습니다.
<html>
<head>
<title>Hello world!</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Your name is: <?php echo $name; ?></p>
</body>
</html>
이전 예 (Blade 관련 구문을 사용하지 않음)에서 $name
변수를 출력합니다. 이 값을 뷰에 전달하려면 뷰 도우미를 호출 할 때 값 배열을 전달해야합니다.
view('example', ['name' => $name]);
또는 compact()
도우미를 사용하십시오. 이 경우 compact ()에 전달 된 문자열은 뷰에 전달할 변수의 이름과 일치합니다.
view('example', compact('name'));
블레이드 변수 명명 규칙
다시보기 위해 데이터를 보냅니다. variable
여러 개인 경우 underscore
을 사용할 수 있지만 -
laravel을 사용하면 오류가 발생합니다.
이렇게하면 오류가 발생합니다 ( user-address
내에 hyphen ( - )
view('example',['user-address' => 'Some Address']);
이렇게하는 올바른 방법 은
view('example', ['user_address' => 'Some Address']);
통제 구조
Blade는 일반적인 PHP 제어 구조에 편리한 구문을 제공합니다.
각각의 컨트롤 구조체는 @[structure]
로 시작하고 @[endstructure]
끝납니다. 태그 안에서는 일반 HTML을 입력하고 Blade 구문을 사용하여 변수를 포함합니다.
조건부
'If'문
@if ($i > 10)
<p>{{ $i }} is large.</p>
@elseif ($i == 10)
<p>{{ $i }} is ten.</p>
@else
<p>{{ $i }} is small.</p>
@endif
'않는 한'진술
( '없는 경우'에 대한 간단한 구문.)
@unless ($user->hasName())
<p>A user has no name.</p>
@endunless
루프
'While'루프
@while (true)
<p>I'm looping forever.</p>
@endwhile
'Foreach'루프
@foreach ($users as $id => $name)
<p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach
'Forelse'Loop
( 'foreach'루프와 같지만 반복되는 배열 표현식이 비어있을 때 실행되는 특수한 @empty
지시문을 추가하여 기본 내용을 표시하는 방법입니다.)
@forelse($posts as $post)
<p>{{ $post }} is the post content.</p>
@empty
<p>There are no posts.</p>
@endforelse
루프 내에서 루프의 상태에 대한 정보를 포함하는 특별한 $loop
변수를 사용할 수 있습니다.
재산 | 기술 |
---|---|
$loop->index | 현재 루프 반복의 인덱스입니다 (0에서 시작). |
$loop->iteration | 현재 루프 반복 (1에서 시작). |
$loop->remaining | 나머지 루프 반복. |
$loop->count | 반복되는 배열의 총 항목 수입니다. |
$loop->first | 이것이 루프를 통한 첫 번째 반복인지 여부입니다. |
$loop->last | 이것이 루프를 통한 마지막 반복인지 여부. |
$loop->depth | 현재 루프의 중첩 수준입니다. |
$loop->parent | 중첩 루프에서 부모의 루프 변수 |
예:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
Laravel 5.2.22 이후, 우리는 또한 지침의 사용 @continue
및 @break
재산 | 기술 |
---|---|
@continue | 현재 반복을 멈추고 다음 반복을 시작하십시오. |
@break | 현재 루프를 중지하십시오. |
예 :
@foreach ($users as $user)
@continue ($user->id == 2)
<p>{{ $user->id }} {{ $user->name }}</p>
@break ($user->id == 4)
@endforeach
그런 다음 ( 5 명이 넘는 사용자가 ID별로 정렬되고 ID가 누락되었다고 가정하면 ) 페이지가 렌더링됩니다
1 Dave
3 John
4 William
PHP 표현식 에코하기
이중 중괄호 {{ $variable }}
내의 PHP 표현식은 e
헬퍼 함수를 통해 실행 된 후에 echo
됩니다 . (그래서 html 특수 문자 ( <
, >
, "
, '
, &
)는 해당 html 엔티티에 대해 안전하게 대체됩니다.) (PHP 표현식은 문자열로 평가되어야하며, 그렇지 않으면 예외가 발생합니다.)
변수 에코하기
{{ $variable }}
배열의 요소 에코하기
{{ $array["key"] }}
객체 속성 반향
{{ $object->property }}
함수 호출의 결과 반향
{{ strtolower($variable) }}
존재 확인하기
일반적으로 PHP에서는 변수가 설정되어 있는지 확인하고이를 인쇄합니다.
- PHP 7 이전
<?php echo isset($variable) ? $variable : 'Default'; ?>
- PHP 7 이후 ( "Null coalescing operator"사용)
<?php echo $variable ?? 'Default'; ?>
블레이드 운영자 or
쉽게이 작업을 수행 할 수 있습니다.
{{ $variable or 'Default' }}
원시 에코
앞에서 언급했듯이, 일반적인 이중 중괄호 구문 {{ }}
은 PHP의 htmlspecialchars
함수를 통해 필터링되어 보안을 강화합니다 (보기에 HTML이 악의적으로 삽입되는 것을 방지합니다). 예를 들어 PHP 표현식으로 인해 HTML 컨텐트 블록을 출력하려고하는 경우와 같이이 동작을 무시하려면 다음 구문을 사용합니다.
{!! $myHtmlString !!}
절대적으로 필요한 경우를 제외하고는 표준 {{ }}
구문을 사용하여 데이터를 이스케이프 처리하는 것이 가장 좋습니다. 또한 신뢰할 수없는 콘텐츠 (예 : 사이트 사용자가 제공 한 콘텐츠)를 반향 출력 할 때는 {!! !!}
구문.
부분 뷰 포함
Blade를 사용하면 다음과 같이 부분 뷰 ( 'partials'라고 함)를 페이지에 직접 포함시킬 수 있습니다.
@include('includes.info', ['title' => 'Information Station'])
위의 코드는 'views / includes / info.blade.php'의보기를 포함합니다. 또한 값 'Information Station'을 갖는 변수 $title
을 전달합니다.
일반적으로 포함 된 페이지는 호출 페이지에서 액세스 할 수있는 모든 변수에 액세스 할 수 있습니다. 예를 들어, 우리는 :
{{$user}} // Outputs 'abc123'
@include('includes.info')
그리고 'includes / info.blade.php'에는 다음이 있습니다 :
<p>{{$user}} is the current user.</p>
그러면 페이지가 렌더링됩니다.
abc123
abc123 is the current user.
각각 포함
경우에 따라 include
문을 foreach
문과 결합하여 include
에서 foreach 루프 내에서 변수에 액세스해야하는 경우가 있습니다. 이 경우 Blade의 각 @each
지시문을 사용하십시오.
@each('includes.job', $jobs, 'job')
첫 번째 매개 변수는 포함 할 페이지입니다. 두 번째 매개 변수는 반복 할 배열입니다. 세 번째 매개 변수는 배열 요소에 지정된 변수입니다. 위의 문장은 다음과 같습니다.
@foreach($jobs as $job)
@include('includes.job', ['job' => $job])
@endforeach
@each
지시문에 선택적 네 번째 인수를 전달하여 배열이 비어있을 때 표시 할보기를 지정할 수도 있습니다.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
레이아웃 상속
레이아웃은보기 파일이며, 부모에게 코드 블록을 주입하는 다른보기에 의해 확장됩니다. 예 :
parent.blade.php :
<html>
<head>
<style type='text/css'>
@yield('styling')
</style>
</head>
<body>
<div class='main'>
@yield('main-content')
</div>
</body>
</html>
child.blade.php :
@extends('parent')
@section('styling')
.main {
color: red;
}
@stop
@section('main-content')
This is child page!
@stop
otherpage.blade.php :
@extends('parent')
@section('styling')
.main {
color: blue;
}
@stop
@section('main-content')
This is another page!
@stop
여기에는 각각 부모를 확장하는 두 개의 하위 페이지 예제가 있습니다. 자식 페이지는 @section
정의하며, 해당 @yield
문에서 부모에 삽입됩니다.
그래서 렌더링 뷰 View::make('child')
말할 것이다 "이것은 자식 페이지입니다!"빨간색으로, 동안 View::make('otherpage')
텍스트를 제외하고, 같은 HTML을 생성 할 것이다 "이것은 또 다른입니다 페이지! "대신 파란색으로 표시됩니다.
보기 파일을 분리하는 것이 일반적입니다 (예 : 레이아웃 파일을위한 레이아웃 폴더 및 다양한 특정 개별보기를위한 별도의 폴더가있는 경우).
레이아웃은 모든 개별보기에서 모든 HTML 상용구를 작성하지 않고도 사이드 바 또는 헤더 추가와 같이 모든 페이지에 표시되어야하는 코드를 적용하기위한 것입니다.
즉 PAGE3을 수행 할 수 있습니다 - 뷰 반복적으로 확장 할 수 있습니다 @extend('page2')
, 페이지 2는 할 수 있습니다 @extend('page1')
.
확장 명령은 사용 된 것과 동일한 구문 사용 View::make
및 @include
, 그래서 파일 layouts/main/page.blade.php
로 액세스 할 layouts.main.page
.
모든보기에 데이터 공유
때로는 여러보기에서 동일한 데이터를 설정해야합니다.
보기 :: 공유 사용하기
// "View" is the View Facade
View::share('shareddata', $data);
이 후 $data
의 내용은 $shareddata
라는 이름으로 모든보기에서 사용할 수 있습니다.
View::share
는 일반적으로 서비스 제공자 또는 컨트롤러의 생성자에서 호출되므로 데이터는 해당 컨트롤러에서만 반환 된보기에서 공유됩니다.
보기 :: 작곡가 사용하기
뷰 작성자는보기가 렌더링 될 때 호출되는 콜백 또는 클래스 메서드입니다. 뷰를 렌더링 할 때마다 뷰에 바인딩 할 데이터가있는 경우 뷰 작성기를 사용하여 해당 논리를 단일 위치로 구성 할 수 있습니다. 변수를 특정보기 또는 모든보기에 직접 바인드 할 수 있습니다.
클로저 기반 작곡가
use Illuminate\Support\Facades\View;
// ...
View::composer('*', function ($view) {
$view->with('somedata', $data);
});
클래스 기반 작곡가
use Illuminate\Support\Facades\View;
// ...
View::composer('*', 'App\Http\ViewComposers\SomeComposer');
View::share
와 마찬가지로 서비스 제공 업체에 작곡가를 등록하는 것이 가장 좋습니다.
작곡가 클래스 접근법을 사용한다면 App/Http/ViewComposers/SomeComposer.php
를 다음과 같이 App/Http/ViewComposers/SomeComposer.php
있습니다.
use Illuminate\Contracts\View\View;
class SomeComposer
{
public function compose(View $view)
{
$view->with('somedata', $data);
}
}
이 예제는 작곡가 등록에서 '*'
를 사용합니다. 이 매개 변수는 작성자를 등록 할보기 이름과 일치하는 문자열입니다 ( *
는 와일드 카드 임). 하위 폴더 (예 : 'users.*'
) 아래에서 경로 그룹의 단일보기 (예 : 'home'
)를 선택할 수도 있습니다.
임의의 PHP 코드 실행
염려 사항을 엄격하게 분리하려는 경우 뷰에서 그러한 일을하는 것이 적절하지 않을 수도 있지만 php
Blade 지시어는 PHP 코드를 실행하는 방법을 허용합니다 (예 : 변수 설정).
@php($varName = 'Enter content ')
(같은 :)
@php
$varName = 'Enter content ';
@endphp
후에:
{{ $varName }}
결과:
내용 입력