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 协议》,转载必须注明作者和本文链接
君子博学而日参省乎己,则知明而行无过矣
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!