PHP 프레임워크 Laravel 블레이드 템플릿이란 무엇입니까?

블레이드 템플릿이란 무엇입니까?

Jul 02, 2020 am 10:55 AM
blade laravel

Blade 템플릿은 Laravel에서 제공하는 템플릿 엔진입니다. 블레이드는 뷰에서 기본 PHP 코드를 사용할 수 있도록 하므로 애플리케이션에서는 블레이드가 사용되지 않습니다. 간접비.

블레이드 템플릿이란 무엇입니까?

Blade 템플릿은 다음과 같습니다.

Blade는 Laravel에서 제공하는 템플릿 엔진으로 간단하고 강력합니다. 다른 PHP 템플릿 엔진과 달리 Blade에서는 보기에서 기본 PHP 코드를 사용할 수 있습니다.

사실 모든 블레이드 뷰는 결국 기본 PHP 코드로 컴파일되어 storage/framework/views 폴더에 캐시됩니다. storage/framework/views 文件夹中。

Laravel 使用的是这些编译后的缓存文件,而不是视图本身,所以,Blade 对于应用程序来说是零开销的。当你修改了视图文件,那么它会重新编译并缓存,以便使用。Blade 视图以 blade.php 为后缀名,一般存放于 resources/views 文件夹中。

模板继承:

1、定义布局文件

Blade 模板引擎的主要两个优点是 “模板继承” 和 “区块”。举一个简单的例子,一个项目里,几乎所有的页面都是一样的布局,这时候就可以把这个布局提炼出来,作为母版页,继承了这个母版页的的页面都有一样的布局效果,成为母版页的子页。母版页还叫布局文件,布局文件就是一个 Blade 视图:

<!-- Stored in resources/views/layouts/app.blade.php -->
<html>
       <head>
             <title>App Name - @yield(&#39;title&#39;)</title>
       </head>
       <body>
         @section(&#39;sidebar&#39;)
               This is the master sidebar.
         @show
         <div class="container">
              @yield(&#39;content&#39;)
         </div>
       <body>
</html>
로그인 후 복사

布局文件里除了基础的 HTNL 标签,还使用了两个指令:@section 和 @yield 。@section定义区块,@yield 定义区块里的内容。

下面。来定义布局文件的子页。

2、继承布局文件

子页中,使用 Blade 的 @extends 指令指定 “继承” 的布局文件,使用 @section 指令为在布局文件中使用 @section 和 @yield 指令的地方注入内容:

<!-- Stored in resources/views/child.blade.php -->
@extends(&#39;layouts.app&#39;)
@section(&#39;title&#39;,&#39;Page Title&#39;)
@section(&#39;sidebar&#39;)
       <p> This is appended to the master sideebar</p>
@endsection
@section(&#39;content&#39;)
         <p>This ismy body content. </p>
@endsection
로그인 후 복사

可以看到,在布局文件中使用 @yield 指令的地方,在子页中仍然使用 @section 注入内容;在布局文件中使用 @section 指令定义的一个好处是:在子页中使用 @section 注入时,可以使用 @parent 指令附加(而非重写)在布局文件中的内容,而在布局文件中使用 @yield 指令定义的地方是做不到的。@parent 指令会在视图渲染的时替换成布局文件里的内容。

注意,与在文件布局里定义的 sidebar 不同的是,子页里使用 @endsection 结束,而非 @show 。因为 @endsection 仅用来定义区块,而 @show 是用来定义、立马产出区块的。

从路由中直接返回视图文件,要用到全局辅助函数 helper :

Route::get(&#39;blade&#39;, function(){
        return view(&#39;child&#39;);
})
로그인 후 복사

3、组件&插槽

组件和插槽提供了类似布局和区块的优点。而组件和插槽的心智模型更符合直觉。设想一下,在我们的项目中有一个可重复的 “弹框” 组件:

<!-- Stored resource/views/alter.blade.php -->
<div class="alter alter-danger">
       {{ $slot }}
</div>
로그인 후 복사

{{ $slot }} 表示插入组建的内容。构建此组件,是使用 Blade 的@component指令:

@component(&#39;alter&#39;)
        <strong>Whoops!</strong> Something went wrong!
@endcomponent
로그인 후 복사

在这个场景里,{{ $slot }} 变量的内容是:

<strong>Whoops! </strong> Something went wrong!
로그인 후 복사

有时一个组件需要多个插槽。这时,只需要稍改组件代码,定义一个 “标题” 插槽,这个插槽称命名插槽。命名插槽是通过简单的 “打印” 匹配其名称的变量来显示内容的:

<!-- Stored resources/views/alter.blade.php-->
<div class="alter alter-danger">
         <div class="alter-title">{{ $title }}</div>
            {{ $slot }}
</div>
로그인 후 복사

为名名插槽注入内容,使用 @slot 指令。所有不在 @slot 指令里的内容都会传递给组件里的 $slot 变量。

@compontent (&#39;alter&#39;)
         @slot(&#39;title&#39;)
            Forbidden
         @endslot
     You are not allowed to access this resource!
@edcompontent~
로그인 후 복사

4、为组建传递额外数据:

有时需要为组建件递额外数据。为此,可以为 @conponent 指令传递第二个数组参数。指定要传递的额外。据所有过去的额外数据作为变量,在组件模板里都可以取的:

@component
     <compontent(&#39;alter&#39;, [&#39;foo&#39; => &#39;bar&#39;);
         .....
@endCompontent
로그인 후 복사

5、显示数据

向 Blade 视图传递数据,是通过将变量包裹在 [ ] 里实现的:

Route::get(&#39;greeting&#39;, function(){
         return view(&#39;welcome&#39;, [ &#39;name&#39; => &#39;&#39;Samantha&#39;]);
})
로그인 후 복사

下面就可以使用 name 变量显示内容了:

Hello! {{ $name }}
로그인 후 복사

{{ }} 是 Blade 视图的打印语句,当然,打印语句里不限制只能打印变量内容,也可以使用 PHP 函数。实际上,打印语句这里可以使用任何 PHP 代码:

The current UNIX timestamp is {{ time() }}
로그인 후 복사

6、显示非转移数据

默认,所有传递给 Blade {{ }} 语句的内容都会使用 htmlspecialchar 函数处理、将内容转义,避免 XSS 攻击。如果无需转义输出的内容,可以使用下面语法:

Hello! {{!! $name !!}}.
로그인 후 복사

不过千万要小心,应该优先选择使用转义的 {{ }}

Laravel은 뷰 자체가 아닌 이러한 컴파일된 캐시 파일을 사용하므로 Blade는 애플리케이션에 대한 오버헤드가 없습니다. 뷰 파일을 수정하면 사용을 위해 다시 컴파일되고 캐시됩니다. 블레이드 보기에는 Blade.php 라는 접미사 이름이 있으며 일반적으로 resources/views 폴더에 저장됩니다.

템플릿 상속:

1. 레이아웃 파일 정의🎜🎜🎜블레이드 템플릿 엔진의 주요 두 가지 장점은 "템플릿 상속"과 "블록"입니다. 간단한 예를 들자면, 프로젝트에서는 거의 모든 페이지가 동일한 레이아웃을 가지고 있으며 이때 이 레이아웃을 추출하여 마스터 페이지로 사용할 수 있습니다. 이 마스터 페이지를 상속받은 모든 페이지는 동일한 레이아웃 효과를 갖게 됩니다. 마스터 페이지의 하위 페이지입니다. 마스터 페이지는 레이아웃 파일이라고도 하며 레이아웃 파일은 블레이드 보기입니다. 🎜rrreee🎜 기본 HTNL 태그 외에도 레이아웃 파일은 @section 및 @yield라는 두 가지 명령도 사용합니다. @section은 블록을 정의하고 @yield는 블록의 내용을 정의합니다. 🎜🎜아래. 레이아웃 파일의 하위 페이지를 정의합니다. 🎜🎜🎜2. 레이아웃 파일 상속🎜🎜🎜하위 페이지에서 블레이드의 @extends 지시문을 사용하여 "상속된" 레이아웃 파일을 지정하고, @section 지시문을 사용하여 @section 및 @yield가 있는 레이아웃 파일에 콘텐츠를 삽입합니다. 🎜rrreee🎜 레이아웃 파일에서 @yield 지시문이 사용되는 경우 @section은 여전히 ​​하위 페이지에 콘텐츠를 삽입하는 데 사용됩니다. 레이아웃 파일에서 @section 지시문 정의를 사용하면 다음과 같은 이점이 있습니다. 하위 페이지에서 @section 사용 주입 시 @parent 지시문을 사용하여 레이아웃 파일의 콘텐츠를 추가(덮어쓰는 대신)할 수 있는데, 이는 @yield 지시문을 사용하여 정의된 레이아웃 파일에서는 불가능합니다. @parent 지시문은 뷰가 렌더링될 때 레이아웃 파일의 콘텐츠로 대체됩니다. 🎜🎜 파일 레이아웃에 정의된 사이드바와는 달리 서브페이지는 @show 대신 @endsection으로 끝나는 점 참고하세요. @endsection은 블록을 정의하는 데만 사용되고, @show는 블록을 정의하고 즉시 생성하는 데 사용되기 때문입니다. 🎜🎜경로에서 직접 보기 파일을 반환하려면 전역 도우미 함수 도우미를 사용하세요:🎜rrreee🎜🎜3. 구성 요소 및 슬롯🎜🎜🎜구성 요소와 슬롯은 레이아웃 및 블록과 유사한 이점을 제공합니다. 구성 요소와 슬롯의 정신 모델이 더 직관적입니다. 프로젝트에 반복 가능한 "팝업 상자" 구성 요소가 있다고 가정해 보겠습니다. 🎜rrreee🎜{{ $slot }}는 삽입된 구성 요소의 콘텐츠를 나타냅니다. 이 구성 요소를 빌드하려면 Blade의 @comComponent 지시문을 사용하세요. 🎜rrreee🎜이 시나리오에서 {{ $slot }} 변수의 내용은 다음과 같습니다. 🎜rrreee🎜구성 요소에 여러 슬롯이 필요한 경우가 있습니다. 이때 구성 요소 코드를 약간 변경하고 명명된 슬롯이라고 하는 "제목" 슬롯을 정의하기만 하면 됩니다. 이름이 지정된 슬롯은 이름과 일치하는 변수를 간단히 "인쇄"하여 콘텐츠를 표시합니다. 🎜rrreee🎜 이름이 지정된 슬롯에 콘텐츠를 삽입하려면 @slot 지시문을 사용하세요. @slot 지시어에 없는 모든 콘텐츠는 구성 요소의 $slot 변수로 전달됩니다. 🎜rrreee🎜🎜4. 구성 요소에 대한 추가 데이터 전달: 🎜🎜🎜때로는 구성 요소에 대한 추가 데이터를 전달해야 합니다. 이렇게 하려면 @conComponent 지시문에 두 번째 배열 인수를 전달할 수 있습니다. 전달될 추가 항목을 지정합니다. 이전의 모든 추가 데이터는 구성 요소 템플릿의 변수로 사용할 수 있습니다: 🎜rrreee🎜🎜5. 데이터 표시 🎜🎜🎜 [ ] 의 변수를 래핑하여 데이터를 블레이드 보기로 전송합니다. 구현 위치: 🎜rrreee🎜 이제 name 변수를 사용하여 내용을 표시할 수 있습니다. 🎜rrreee🎜{{ }} 는 블레이드 보기의 인쇄 문입니다. 물론 인쇄 문은 변수 내용을 인쇄하는 것으로 제한되지 않습니다. , PHP 함수를 사용할 수도 있습니다. 실제로 여기에서는 인쇄 문에 모든 PHP 코드를 사용할 수 있습니다. 🎜rrreee🎜🎜6. 전송되지 않은 데이터 표시 🎜🎜🎜기본적으로 모든 콘텐츠는 Blade {{ }} 문에 전달됩니다. XSS 공격을 피하기 위해 htmlspecialchar 함수를 사용하여 콘텐츠를 처리하고 이스케이프합니다. 출력 콘텐츠를 이스케이프할 필요가 없는 경우 다음 구문을 사용할 수 있습니다. 🎜rrreee🎜그러나 주의해야 할 점은 이스케이프된 {{ }} 구문을 사용하여 XXS 공격을 방지하는 데 우선순위를 두어야 한다는 것입니다. 때로는 사용자가 의도적이거나 의도하지 않은 데이터 입력을 피하는 것이 어렵기 때문입니다. 🎜🎜🎜관련 학습 권장사항: 🎜Laravel🎜🎜🎜🎜

위 내용은 블레이드 템플릿이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? May 07, 2024 am 08:39 AM

PHP의 데이터베이스 작업은 객체를 관계형 데이터베이스에 매핑하는 ORM을 사용하여 단순화됩니다. Laravel의 EloquentORM을 사용하면 객체 지향 구문을 사용하여 데이터베이스와 상호 작용할 수 있습니다. 모델 클래스를 정의하거나 Eloquent 메소드를 사용하거나 실제로 블로그 시스템을 구축하여 ORM을 사용할 수 있습니다.

Laravel과 CodeIgniter의 최신 버전 비교 Laravel과 CodeIgniter의 최신 버전 비교 Jun 05, 2024 pm 05:29 PM

Laravel 9 및 CodeIgniter 4의 최신 버전은 업데이트된 기능과 개선 사항을 제공합니다. Laravel9은 MVC 아키텍처를 채택하여 데이터베이스 마이그레이션, 인증, 템플릿 엔진 등의 기능을 제공합니다. CodeIgniter4는 HMVC 아키텍처를 사용하여 라우팅, ORM 및 캐싱을 제공합니다. 성능면에서는 Laravel9의 서비스 제공자 기반 디자인 패턴과 CodeIgniter4의 경량 프레임워크가 뛰어난 성능을 제공합니다. 실제 애플리케이션에서 Laravel9은 유연성과 강력한 기능이 필요한 복잡한 프로젝트에 적합한 반면, CodeIgniter4는 빠른 개발 및 소규모 애플리케이션에 적합합니다.

Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Laravel과 CodeIgniter의 데이터 처리 기능은 어떻게 비교됩니까? Jun 01, 2024 pm 01:34 PM

Laravel과 CodeIgniter의 데이터 처리 기능을 비교해 보세요. ORM: Laravel은 클래스-객체 관계형 매핑을 제공하는 EloquentORM을 사용하는 반면, CodeIgniter는 데이터베이스 모델을 PHP 클래스의 하위 클래스로 표현하기 위해 ActiveRecord를 사용합니다. 쿼리 빌더: Laravel에는 유연한 체인 쿼리 API가 있는 반면, CodeIgniter의 쿼리 빌더는 더 간단하고 배열 기반입니다. 데이터 검증: Laravel은 사용자 정의 검증 규칙을 지원하는 Validator 클래스를 제공하는 반면, CodeIgniter는 내장된 검증 기능이 적고 사용자 정의 규칙을 수동으로 코딩해야 합니다. 실제 사례: 사용자 등록 예시에서는 Lar를 보여줍니다.

Laravel - 장인 명령 Laravel - 장인 명령 Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Jun 05, 2024 pm 07:50 PM

초보자의 경우 CodeIgniter는 학습 곡선이 더 완만하고 기능이 적지만 기본적인 요구 사항을 충족합니다. Laravel은 더 넓은 기능 세트를 제공하지만 학습 곡선이 약간 더 가파릅니다. 성능면에서는 Laravel과 CodeIgniter 모두 좋은 성능을 보입니다. Laravel은 보다 광범위한 문서와 적극적인 커뮤니티 지원을 제공하는 반면 CodeIgniter는 더 간단하고 가벼우며 강력한 보안 기능을 갖추고 있습니다. 블로그 애플리케이션을 구축하는 실제 사례에서 Laravel의 EloquentORM은 데이터 조작을 단순화하는 반면 CodeIgniter는 더 많은 수동 구성이 필요합니다.

Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 am 09:09 AM

대규모 프로젝트를 위한 프레임워크를 선택할 때 Laravel과 CodeIgniter는 각각 고유한 장점을 가지고 있습니다. Laravel은 엔터프라이즈급 애플리케이션을 위해 설계되었으며 모듈식 디자인, 종속성 주입 및 강력한 기능 세트를 제공합니다. CodeIgniter는 속도와 사용 편의성을 강조하여 중소 규모 프로젝트에 더 적합한 경량 프레임워크입니다. 요구 사항이 복잡하고 사용자 수가 많은 대규모 프로젝트의 경우 Laravel의 성능과 확장성이 더 적합합니다. 간단한 프로젝트나 리소스가 제한된 상황에서는 CodeIgniter의 가볍고 빠른 개발 기능이 더 이상적입니다.

PHP 엔터프라이즈 애플리케이션 마이크로서비스 아키텍처 설계에 대한 질문과 답변 PHP 엔터프라이즈 애플리케이션 마이크로서비스 아키텍처 설계에 대한 질문과 답변 May 07, 2024 am 09:36 AM

마이크로서비스 아키텍처는 PHP 프레임워크(예: Symfony 및 Laravel)를 사용하여 마이크로서비스를 구현하고 RESTful 원칙 및 표준 데이터 형식에 따라 API를 설계합니다. 마이크로서비스는 메시지 대기열, HTTP 요청 또는 gRPC를 통해 통신하고 모니터링 및 문제 해결을 위해 Prometheus 및 ELKStack과 같은 도구를 사용합니다.

Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 pm 05:29 PM

소규모 프로젝트의 경우 Laravel은 강력한 기능과 보안이 필요한 대규모 프로젝트에 적합합니다. CodeIgniter는 가볍고 사용하기 쉬운 매우 작은 프로젝트에 적합합니다.

See all articles