- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Laravel中的Blade模板引擎示例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
本文主要给大家介绍了关于Laravel中Blade模板引擎的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧.
Blade 模板引擎 。
Blade 是 laravel 提供的一个简单强大的模板引擎,它是把 Blade 视图编译成原生的 PHP 代码并缓存起来。缓存会在 Blade 视图改变时而改变,这意味着 Blade 并没有给你的应用添加编译的负担。Blade 视图文件使用 .blade.php 后缀,一般都存储在 resources/views 目录下.
模板继承 。
先来看个例子 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- Stored in resources/views/layouts/master.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
>
|
Blade 模板文件包含了典型的 HTML 标记。你肯定看到了 @section 和 @yield 指令。@section 指令就如它的名字所暗示的那样定义了一个内容区块,而 @yield 指令是用来显示所提供的挂件区块所包含的内容。我们已经定义好了一个基本的布局,接下来我们可以使用 Blade 的 @extends 指令来明确的指定继承这个布局。然后使用 @section 指令将挂件中的内容挂载到布局中,在上面的例子中,挂件的内容将被挂载到布局中的 @yield 部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!-- Stored in resoures/views/child.blade.php -->
@
extends
(
'layouts.master'
)
@section(
'title'
,
'Page Title'
)
@section(
'sidebar'
)
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section(
'content'
)
<p>This is my body content.</p>
@endsection
|
在上面的例子作用 sidebar 挂件利用 @parent 指令来追加布局中的 sidebar 部分的内容,如果不使用则会覆盖掉布局中的这部分。@parent 指令会在视图被渲染时替换为布局中的内容.
Blade 视图可以像原生 PHP 视图一样使用全局帮助函数 view 来返回渲染后的内容:
1
2
3
|
Route::get(
'blade'
,
function
() {
return
view(
'child'
);
});
|
显示数据 。
你可以使用花括号 { 来在视图中显示传递到视图中的变量,例如,你定义了下面的路由:
1
2
3
|
Route::get(
'greeting'
,
function
() {
return
view(
'welcome'
, [
'name'
=>
'Duicode'
]);
})
|
你可以在视图中这样来输出 name 变量的内容:
1
|
Hello, {{
$name
}}
|
当然,你也可以从原生 PHP 方法中返回内容。事实上,你可以在 Blade echo 声明中使用任意的 PHP 代码:(Blade {{}} 声明中的内容是自动通过 htmlentities 方法过滤的,用来防止 XSS 攻击。) 。
1
|
The current UNIX timestamp is {{ time() }}
|
由于很多 JavaScript 框架都使用花括号来表明所提供的表达式应该被显示在浏览器中。所以你可以使用 @ 符号来告诉 Blade 渲染引擎你需要这个表达式原样保留:
1
|
Hello, @{{ name }}
|
我们常用三目运算符来赋值 。
1
|
{{ isset(
$name
) ?
$name
:
'Default'
}}
|
Blade 提供了一个便捷的方式来替换这个三元声明:
1
|
{{
$name
or
'Default'
}}
|
默认Blade {{}} 声明会自动的使用 htmlentities 方法来避免 XSS 攻击。如果你不想你的数据被转义,你可以使用下面的语法,但是要注意,小心被攻击:
1
|
Hello, {!!
$name
!!}
|
控制结构 。
你可以通过 @if,@elseif,@else和 @endif 指令来使用 if 控制结构
1
2
3
4
5
6
7
|
@
if
(
count
(
$records
) === 1)
I have one record!
@
elseif
(
count
(
$records
) > 1)
I have multiple records!
@
else
I don't have any records!
@
endif
|
当然为了方便,Blade 也提供了替代指令 @unless 指令:
1
2
3
|
@unless (Auth::check())
You are not signed in.
@endunless
|
也可以使用 @hasSection 指令来判断提供给布局的挂件是否包含了内容
1
2
3
4
5
6
7
|
<title>
@hasSection(
'title'
)
@yield(
'title'
) - App Name
@
else
App Name
@
endif
</title>
|
说到控制少不了循环结构,类似PHP的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@
for
(
$i
= 0;
$i
< 10;
$i
++)
The current value is {{
$i
}}
@
endfor
@
foreach
(
$users
as
$user
)
<p>This is user {{
$user
->id }}</p>
@
endforeach
@forelse (
$users
as
$user
)
<li>{{
$user
->name }}</li>
@
empty
<p>No users</p>
@endforelse
@
while
(true)
<p>I'm looping forever.</p>
@
endwhile
|
Blade 也提供了终止迭代或取消当前迭代的指令:
1
2
3
4
5
6
7
8
9
10
11
|
@
foreach
(
$users
as
$user
)
@
if
(
$user
->type == 1)
@
continue
@
endif
<li>{{
$user
->name }}</li>
@
if
(
$user
->number == 5)
@
break
@
endif
@
endforeach
|
你也可以使用指令声明包含条件的方式来达到中断
1
2
3
4
5
6
7
|
@
foreach
(
$users
as
$user
)
@
continue
(
$user
->type == 1)
<li>{{
$user
->name }}</li>
@
break
(
$user
->number == 5)
@
endforeach
|
包含子视图 。
可以使用 @include 指令来包含一个视图的内容,当前视图中的变量也会被共享给子视图:
1
2
3
4
5
6
7
|
<div>
@
include
(
'shared.errors'
)
<form>
<!-- Form Contents -->
</form>
</div>
|
尽管子视图会自动继承父视图中的所有数据变量,你也可以直接传递一个数组变量来添加额外的变量到子视图(在 Blade 视图中避免使用 __DIR__ 和 __FILE__ 常量,因为它们会解析为视图缓存所在的位置):
1
|
@
include
(
'view.name'
, [
'some'
=>
'data'
])
|
你可以使用 Blade 的 @each 指令来在一行中合并引入多个视图
1
|
@each(
'view.name'
,
$jobs
,
'job'
)
|
第一个参数是数组或集合中每个元素需要被渲染的视图名称.
第二个参数是一个数组或集合,被用来提供迭代.
第三个参数是要分配给当前视图的变量名.
你也可以传递第四个参数到 @each 指令。如果所提供的数组是空数组的话,该参数所提供的视图将会被引入.
1
|
@each(
'view.name'
,
$jobs
,
'job'
,
'view.empty'
)
|
Blade 中的注释,这样写不会被渲染:
1
|
{{-- This comment will not be present in the rendered HTML --}}
|
Blade 允许你在已命名的堆中压入内容:
1
2
3
|
@push(
'scripts'
)
<script src=
"/example.js"
></script>
@endpush
|
你可以在你需要的时候压入相同的堆任意的次数,你需要在布局中使用 @stack 来渲染堆
1
2
3
4
|
<head>
<!-- Head Contents -->
@stack(
'scripts'
)
</head>
|
可以使用 @inject 指令来从服务容器中取回服务:
1
2
3
4
|
@inject(
'metrics'
,
'App\Services\MetricsService'
)
<div>
Monthly Revenue: {{
$metrice
->monthlyRevenue() }}
</div>
|
第一个参数将作为所取回服务存放的变量名, 。
第二个参数是你想要在服务容器中取回的类或接口名称.
可以使用 directvie 方法来注册指令。当 Blade 编译器遇到该指令时,它会自动的调用该指令注册时提供的回调函数并传递它的参数.
下面的例子创建了 @datetime($val) 指令来格式化 $val
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?php
namespace
App\Providers;
use
Blade;
use
Illuminate\Support\ServiceProvider;
class
AppServiceProvider
extends
ServiceProvider{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public
function
boot(){
Blade::directive(
'datetime'
,
function
(
$expression
) {
return
"<?php echo with{$express}->format('m/d/Y H:i'); ?>"
;
});
}
/**
* Register bindings in the container
*
* @return void
*/
public
function
register() {
//
}
}
|
上面的例子中使用了 Laravel 的 with 帮助方法,它只是简单的返回一个所提供的对象或值,并提供方便的链式调用。最终该指令生成的 PHP 代码如下:
1
|
<?php
echo
with(
$var
)->format(
'm/d/Y H:i'
); ?>
|
在你更新 Blade 指令的逻辑之后,你应该删除所有已缓存的 Blade 视图,你可以使用 view:clear Artisan 命令来清除.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.
原文链接:http://blog.duicode.com/2442.html 。
最后此篇关于Laravel中的Blade模板引擎示例详解的文章就讲到这里了,如果你想了解更多关于Laravel中的Blade模板引擎示例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经安装了 composer,但是查看 Laravel 文档,我正在努力解决: “确保将 ~/.composer/vendor/bin 目录放在您的 PATH 中,以便在您的终端中运行 larave
我想在迁移时插入外键而不是在 1 中添加外键值 `public function up() { Schema::table('users', function (Bluepri
这是一个open bug on Github对于 laravel-mongodb 包,但没有任何反应。也许有人知道解决方案..? 选择作为单个文档时,日期显示为日期 { "_id": "5ca
我有一个 Laravel 应用程序,我将其用作 Joomla 中构建的更大应用程序的 API。我真的很喜欢使用 Laravel,并决定在 Joomla 应用程序中使用 Eloquent。我通过在 La
我有两个 Laravel 应用程序使用相同的数据库,因此具有相同的用户和密码。 假设应用程序称为 A 和 B。 如果用户登录 A,我该怎么做才能让他们自动登录 B?因此,如果他们登录到 A,那么当他们
我正在 github 上查看 Laravel 的源代码并注意到有一个 laravel/laravel和一个 laravel/framework .它们都链接到 Laravel 网站上的相同文档,并声明
我正在尝试将 laravel 从 5.4 版本更新到 5.5。我已经按照 Laravel 指南的指示完成了所有操作: https://laravel.com/docs/master/upgrade 当
我尝试从 foreach 向每个用户添加一些新值,但因为我使用 get,现在我不能在响应中使用分页,但我还需要向每个用户添加这些值。有什么想法吗? public function statistics
我有一个链接到销毁按钮的删除链接 $task->id ,'method'=>'DELETE'] ) }}"> delete 这是销毁函数 public function destroy($i
我想在 Laravel 中上传一组文件,但我不确定文件的路径和存储对象。八现在数据已存储,但在我的情况下路径是#。在下图中,我有从前面发送的数据(Vuejs 和我正在使用 vue-upload-com
在使用三向数据透视表时,我很难在 Laravel 中进行预加载。数据库设置如下: +-------+--------+-------+-------------+ | deals | venues |
我一直在从事 laravel 5.7 博客项目。我想评论一篇文章。 我需要实现这个: 登录前,我可以在评论文本区输入任何内容 我提交评论(当然会被auth中间件拦截) 然后我被重定向到登录页面 登录后
我正在尝试为我的应用程序中的文件创建一个临时 URL。我能够将文件上传到 S3 存储桶,并且能够使用方法 \Storage::temporaryUrl($this->url, now()->addHo
如果将 Eloquent 模型作为输入传递给 Laravel 排队作业,但模型在作业在队列中运行之前被删除,会发生什么情况? 例如,我正在使用 Laravel 5.2 构建一个电子商务网站,客户可以在
我正在尝试运行在测试运行之前将数据输入数据库的单元测试。我已经定义了一个设置方法,它为每个我不想要的测试用例运行。设置方法执行良好,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所
美好的一天。例如,我有一个带有字段/属性的模型 People: name surname 而且模型也有这个方法: public function FullName() { return "{$
我无法理解 Laravel 存在验证在检查数据库中现有记录方面的工作原理。 例如 带有 user.id = 1 的 POST 请求 是否可以使用验证规则:'id' => 'exists:users'检
我正在使用Laravel 5.2创建站点 我想做的是 INSERT同时3行 新的3行必须包含时间戳created_at updated_at。 使用Query Builder方法insert,是的,它
我试图通过href Action 将一些数据传递给我的 Controller 。我不知道为什么,但是laravel使用 GET 方法传递数据,但是我需要一个 POST 来代替 GET 。我真的不明白为
我有一个问题,我的存储文件夹上的服务器前提每 2 天重置一次。所以我运行这些命令并得到修复: sudo chown -R $USER:www-data storage sudo chown -R $U
我是一名优秀的程序员,十分优秀!