수색…


소개

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 }}

결과:

내용 입력



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow