Laravel 学习笔记二: Blade模板
介绍
首先我理解的模板就是封装一些特殊的语法结构来完成特定的功能,模板可以转化成原生的php代码,Blade模板就是这样的一套模板引擎,它具有语法简单而且容易扩展的特点,而且Blade语法都被编译成正常的PHP代码并缓存,所以它的速度很快,并且允许在Blade文件中使用原生PHP代码(如果需要), 还有其它的模板引擎如Twig
Blade 模板文件使用 .blade.php
作为文件扩展名,被存放在 resources/views
目录
Blade 视图可以使用全局 view
函数从 Route 或控制器返回,可以使用 view 函数的第二个参数将数据传递到 Blade 视图
Route::get('/', function () {
return view('welcome', ['name' => 'zstartw']);
});
也可以使用下面这个方法
Route::get('/', function () {
return view('welcome')->with('name', 'zstartw');
});
看了一下源代码,原来View是一个接口, 有下面三个方法,所以这里可以调用到with方法
interface View extends Renderable
{
/**
* Get the name of the view.
*
* @return string
*/
public function name();
/**
* Add a piece of data to the view.
*
* @param string|array $key
* @param mixed $value
* @return $this
*/
public function with($key, $value = null);
/**
* Get the array of view data.
*
* @return array
*/
public function getData();
}
输出数据
使用的是echo语法 {{ }}
, 它用于包含PHP中输出部分的内容。{{$variable}}
与普通PHP中的<?php echo htmlentities($variable) ?>
, <?=htmlentities($variable)?>
类似。Blade在默认情况下会使用PHP的htmlentities()来转义所有输出信息,以保护用户免受恶意脚本插入的攻击, 如果你想进行没有转义的输出,则可以使用{!!和!!}
实现。
渲染 JSON
有这种场景,目前我还没有遇到,数组传递给视图,以将其呈现为 JSON,以便初始化 JavaScript 变量,这个时候就可以使用下面方法
<script>
var app = <?php echo json_encode($array); ?>;
</script>
或者,您可以使用 Illuminate\Support\Js::from 方法指令
<script>
var app = {{ Illuminate\Support\Js::from($array) }};
</script>
最新版本可以使用Js
<script>
var app = {{ Js::from($array) }};
</script>
Blade指令
这也是blade模板的一个优势,提供很多方便的指令:
if语句
注意要带上@endif
, 不然会报语法错误 syntax error, unexpected end of file
@if (count($records) === 1)
// 有一条记录
@elseif (count($records) > 1)
// 有多条记录
@else
// 没有记录
@endif
为了方便, Blade 还提供了一个 @unless 指令:
@unless (Auth::check())
// 还没有登录
@endunless
相当于 @if (! Auth::check()) @endif
授权指令
@auth
和 @guest
指令可用于快速判断当前用户是否已经获得 授权或是游客, 这也是个很方便的指令
@auth
// 用户已经通过认证……
@endauth
@guest
// 用户没有通过认证……
@endguest
如有需要,您亦可在使用 @auth
和 @guest
指令时指定 鉴权守卫, 这个后面在项目里面试一下
@auth('admin')
// 用户已经通过认证...
@endauth
@guest('admin')
// 用户没有通过认证...
@endguest
循环
用的多的是foreach, 在遍历 foreach 循环时,循环内部可以使用 $loop 变量, 可以使用这个方便判断是第一个还是最后一个
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
嵌入原生的php代码
@php
$counter = 1;
@endphp
组件
创建的组件会在resources/views/components 目录中, 在为自己的应用程序编写组件时,会在 app/View/Components 目录和 resources/views/components 目录中自动发现组件,因此通常不需要进一步的组件注册。Blade 组件以 x-
字符串开始
本作品采用《CC 协议》,转载必须注明作者和本文链接