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('title')</title> </head> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> <body> </html>
布局文件里除了基础的 HTNL 标签,还使用了两个指令:@section 和 @yield 。@section定义区块,@yield 定义区块里的内容。
下面。来定义布局文件的子页。
2、继承布局文件
子页中,使用 Blade 的 @extends 指令指定 “继承” 的布局文件,使用 @section 指令为在布局文件中使用 @section 和 @yield 指令的地方注入内容:
<!-- Stored in resources/views/child.blade.php --> @extends('layouts.app') @section('title','Page Title') @section('sidebar') <p> This is appended to the master sideebar</p> @endsection @section('content') <p>This ismy body content. </p> @endsection
可以看到,在布局文件中使用 @yield 指令的地方,在子页中仍然使用 @section 注入内容;在布局文件中使用 @section 指令定义的一个好处是:在子页中使用 @section 注入时,可以使用 @parent 指令附加(而非重写)在布局文件中的内容,而在布局文件中使用 @yield 指令定义的地方是做不到的。@parent 指令会在视图渲染的时替换成布局文件里的内容。
注意,与在文件布局里定义的 sidebar 不同的是,子页里使用 @endsection 结束,而非 @show 。因为 @endsection 仅用来定义区块,而 @show 是用来定义、立马产出区块的。
从路由中直接返回视图文件,要用到全局辅助函数 helper :
Route::get('blade', function(){ return view('child'); })
3、组件&插槽
组件和插槽提供了类似布局和区块的优点。而组件和插槽的心智模型更符合直觉。设想一下,在我们的项目中有一个可重复的 “弹框” 组件:
<!-- Stored resource/views/alter.blade.php --> <div class="alter alter-danger"> {{ $slot }} </div>
{{ $slot }}
表示插入组建的内容。构建此组件,是使用 Blade 的@component指令:
@component('alter') <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 ('alter') @slot('title') Forbidden @endslot You are not allowed to access this resource! @edcompontent~
4、为组建传递额外数据:
有时需要为组建件递额外数据。为此,可以为 @conponent 指令传递第二个数组参数。指定要传递的额外。据所有过去的额外数据作为变量,在组件模板里都可以取的:
@component <compontent('alter', ['foo' => 'bar'); ..... @endCompontent
5、显示数据
向 Blade 视图传递数据,是通过将变量包裹在 [ ]
里实现的:
Route::get('greeting', function(){ return view('welcome', [ 'name' => ''Samantha']); })
下面就可以使用 name 变量显示内容了:
Hello! {{ $name }}
{{ }}
是 Blade 视图的打印语句,当然,打印语句里不限制只能打印变量内容,也可以使用 PHP 函数。实际上,打印语句这里可以使用任何 PHP 代码:
The current UNIX timestamp is {{ time() }}
6、显示非转移数据
默认,所有传递给 Blade {{ }}
语句的内容都会使用 htmlspecialchar
函数处理、将内容转义,避免 XSS 攻击。如果无需转义输出的内容,可以使用下面语法:
Hello! {{!! $name !!}}.
不过千万要小心,应该优先选择使用转义的 {{ }}
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!