Laravel文档梳理9、Blade模板

前言:Laravel文档梳理,仅作为记录后看,无关其他。

1、blade是什么?
Blade是Laravel提供的模板引擎

2、blade的视图文件是什么样的?
后缀为.blade.php的文件,存放于resources/views目录

3、blade模板的优点是?
模板继承 与 区块

4、blade模板示例:
<!-- 文件保存于 resources/views/layouts/master.blade.php -->

<html>
    <head>
        <title>应用程序名称 - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            这是主要的侧边栏。
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

@section定义一个内容区块,@yield被用来显示指定区块的内容。

5、页面的继承布局
实例,接4
<!-- 保存于 resources/views/child.blade.php -->

@extends('layouts.master')

@section('title', '页面标题')

@section('sidebar')
    @parent

    <p>这边会附加在主要的侧边栏。</p>
@endsection

@section('content')
    <p>这是我的主要内容。</p>
@endsection

解释:
1、@extend命令指定子页面继承哪个布局,这里,继承的master.blade.php的布局
2、master布局中,定义了 <title>应用程序名称 - @yield('title')</title>,所以,子页面可以通过@section定义一个区块的内容,其他的一样。
3、@parent命令,这里需要注意一下,它是增加,而不是覆盖内容。@parent命令会在视图输出时,被置换成布局的内容。

6、blade页面赋值
Route::get('greeting', function () {
    return view('welcome', ['name' => 'Samantha']);
});

页面显示:
Hello, {{ $name }}.

Ps:任何你想要的代码都可以放到blade模板里
如 UNIX 时间戳为 {{ time() }}。

注意:blade模板的{{  }}语法会自动调用PHP的htmlentites函数来防御XSS攻击

7、blade与js语法的冲突
很多的js也有使用大括号来显示指定表达式的习惯,为了规避冲突,blade模板引擎使用@符号来区分。
<h1>Laravel</h1>

Hello, @{{ name }}.

8、blade模板的三目运算
{{ isset($name) ? $name : 'Default' }}
也可以这样替代:
{{ $name or 'Default' }}

9、有些变量,赋值到blade模板,会被htmlentites()函数转义,但是,你不想被转义,怎么办?
如下实例:
Hello, {!! $name !!}.

警告:对于用户提供的数据,请总是使用{{  }}语法来解析,以防止XSS攻击

10、if表达式
@if (count($records) === 1)
    我有一条记录!
@elseif (count($records) > 1)
    我有多条记录!
@else
    我没有任何记录!
@endif

11、@unless 除非
@unless (Auth::check())
    你尚未登录。
@endunless

括号为false显示“你尚未登录”

12、循环
@for ($i = 0; $i < 10; $i++)
    目前的值为 {{ $i }}
@endfor

@foreach ($users as $user)
    <p>此用户为 {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>没有用户</p>
@endforelse

@while (true)
    <p>我永远都在跑循环。</p>
@endwhile

13、@include 引入子视图
<div>
    @include('shared.errors')

    <form>
        <!-- 表单内容 -->
    </form>
</div>

Ps:子视图会继承父视图的所有数据,但如果,你还想给子视图传递额外数据,多加一个数组参数,即可。如下操作:
@include('view.name', ['some' => 'data'])

注意:避免在视图中使用__DIR__及__FILE__常数

14、@each命令
@each('view.name', $jobs, 'job')

Ps:参数一、局部视图名称;参数二、要传递的变量;参数三、视图中接收变量值的名称
换句话说,这条命令的意思是,给view.name视图传递变量$jobs的值到页面的job。

15、注释
{{-- 此注释将不会出现在渲染后的 HTML --}}

Ps:注释如上操作就行了。

16、@inject 服务注入
@inject('metrics', 'App\Services\MetricsService')

<div>
    每月收入:{{ $metrics->monthlyRevenue() }}。
</div>

Ps:@inject命令可以取出laravel服务器中的容器到页面。
参数一:服务的名;参数二:服务的类或接口的全名。

17、自定义blade命令
Blade允许自定义命令,使用directive()方法注册,实例如下:
<?php

namespace App\Providers;

use Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 运行服务注册后的启动进程。
     *
     * @return void
     */
    public function boot()
    {
        Blade::directive('datetime', function($expression) {
            return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
        });
    }

    /**
     * 在容器注册绑定。
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

在blade页面,调用这个自定义的命令,比如页面传$val参数,调用如下:
@datetime($var)

Ps:注意自定方法中的with()方法,它会简单地返回指定对象的值,并且允许链式操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值