Laravel 5.4 官方文档摘记:视图

33 篇文章 0 订阅

模板

简介

所有的视图都保存在resource/views下,所有的视图文件都被保存成fileName.blade.php这样的命名格式。而且其中也支持编写原生的PHP代码!

模板继承

<!--基础模板 base.blade.php-->
<title>@section('title','这里是默认值')</title>
section('content')
    这里是基础内容,如果下面有相同section,就会进行覆盖
@show
@yield('footer')
@show

<!--继承模板 extends.blade.php-->
@extends('base.blade.php')
@section('content')
这里是新的内容
@stop

section()

yield()

首先是这两个的区别,可以看这篇文章,里面介绍的很好。但是为了防止日后上面的超链接失效,所以在这里这里做一个转述。在介绍这两个的区别之前,要先介绍另一个特殊标签@parent。这个标签可以读取模板中标签的内容,比如:

@section('anyName')
这里是基础模板的内容
@show

@section('anyName')
@parent
parent标签会将基础模板的内容也显示出来
@stop

最后输出的结果为:

这里是基础模本的内容
parent标签会将基础模板的内容也显示出来

但是!!!对于@yield这个效果是不存在的,@yield只会将结果进行覆盖,即使使用@parent,也不能在其中输出基础模板中的内容。所以,如果上面使用@yield来代替@section的话,那么最后的结果就是:

parent标签会将基础模板的内容也显示出来

show

stop

上面的例子中,这两个标签是跟在@section@yield后面的,这两个标签有什么用呢?我个人感觉比较实在的说法是:@show能使从@section或者@yield开始的部分在下一个继承页面也有效,而@stop则仅能使该部分仅在当前页面有效。看下面这个例子,也是来源于上面那位大哥:

<!--这里是基础模板 base.blade.php-->
@section('anyName')
注意,这里是以show结尾的
@show
@section('anyName2')
注意,这里是以stop结尾的
@stop

<!--这里是继承模板 extends.blade.php-->
@extends('base.blade.php')
@section('anyName')
这里的内容还会显示,而且覆盖基础模板内容
@stop
@section('anyName2')
这里的内容不会显示,因为基础模板使用@stop结尾,该部分section不再在继承模板中进行输出
@stop

所以一般情况下,都是在基础模板中使用@show开始,在继承模板中使用@stop结尾。


append

override

这两个从名字上来看好像也蛮好区分的,@append表示追加,@override则是覆盖。顺道一提,这两个都是用在在一个文件中扩展@section或者@yield的情况下的。比如下面的例子:

<!--基础模板 base.blade.php -->
@section('part1')
第一部分
@show
@yield('part2')
第二部分
@show

<!--继承模板 extends.blade.php -->
@section('part1')
这里会追加基础模板的内容,而不是覆盖
@append
@section('part1')
不止可以追加一次,可以追加多次
@append
@yield('part2')
yield的调用方式是一样的
@append
<!--这里演示 override.blade.php -->
@section('part1')
注意这段代码的最后
@append
@section('part1')
这里再追加一点内容
@append
@section('part1')
这里会把上面所有的内容进行一个覆盖,所以最后只会显示这部分内容。
@overide

parent

上面演示过了,就是输出父模板的内容。


extends()

上面也演示过了,这里就多插一句,当视图文件不是直接保存resource/views下时,比如基础模板保存在resource/views/layout路径下,且文件名为default.blade.php,则继承该文件时,应该这么写:@extends('layout.default'),这里以.表示文件路径,最后只要加上文件名default,并不需要完整的文件名。

组件和插槽

详细介绍

component

slot

这两个玩意怎么用呢?直接来看例子,简单易懂。首先是一个基础组件,这个组件有其基础的内容,但是同时也接受来自调用者的参数输入。

<!--基础组件 component.blade.php -->
<!--这里的title是需要调用组件时进行渲染的-->
<h1>{{ $title }}</h1>
<p>
    <!--这部分是默认渲染的内容-->
    {{ $slot }}
</p>

@component('component')
    @slot('title')
        这里就是传入组件component的title参数
    @endslot
    这里就是传入slot部分的参数
@endcomponent

@component('component',['key'=>'value'])
上面使用数组形式将额外参数传递进组件中
@endcomponent

在组件中只需要调用对应的{{$key}}就可以获取传递进来的参数了。

数据输出

正常输出

{{ $key }}

判断输出

{{ isset($key)?$key:'默认值' }}

JavaScript输出

为了防止JavaScript脚本的代码和Laravel的原生Blade模板引擎起冲突,可以设置verbatim标签来防止Blade编译其中的内容。

@verbatim
<!--在这里面写JavaScript的代码,Blade模板引擎是不会编译的-->
@endverbatim

流程控制

判断

@if @elseif @else @endif

循环

@for @endfor @foreach @endforeach

判断 + 循环

@forelse @while

这里特别介绍一下@forelse详细介绍

现在假设原始代码是这样的

@foreach($users as $user)
    @if(!empty($user))
        {{$user->name}}
    @elseif
        未命名
    @endif
@endforeach

这样在循环中嵌套判断很麻烦,所以Laravel对上述过程做了简化,就变成了forelse

@forelse($users as $user)
    {{$user->name}}
@empty
    未命名
endforelse

终止循环

@break @continue

其中还可以引入条件判断:

@foreach($users as $user)
    @continue($user->id>5)
        {{$user->name}}
    @break($user->==10)
@endforeach

其中,当用户的id小于5时,输出该用户的姓名,但是循环仍在继续,直到用户的id大于5。但是在用户的id等于10时,结束循环。

$loop

这玩意很好!

$loop变量说明
$loop->index当前循环的索引,注意,不是array数组的索引,而是单纯的从0开始的计数索引
$loop->iteration当前循环的迭代,从1开始
$loop->remaining当前循环的剩余迭代
$loop->count当前循环的总迭代次数
$loop->first是否是当前循环的第一个迭代
$loop->last是否是当前循环的最后一个迭代
$loop->depth当前循环的嵌套层级
$loop->parent嵌套循环中父级的$loop变量

注释

Blade模板引擎的注释是:{{--这里填写注释语句--}}

PHP代码

@php @endphp

子视图

@include()当有路径问题时,也是使用.来代表文件夹。

当然,也可以往子视图中传入参数:@include('subView',['key'=>'value'])

堆栈

直接看例子吧,我觉得是蛮鬼畜的:

@push('anyName')
    <script src='/scriptName.js'></script>
@endpush

这里的@push就是将一个keyanyNamevalue<script src='/scriptName.js'></script>的键值对存入堆栈中。

当想要调用该键值对时,只需要调用@stack命令即可:

@stack('anyName')

自定义标签

首先,这个自定义标签是设置在服务提供者中的,关于如何自定义服务创建者,可以看这篇文章。直接来看如何设置以及如何调用:

设置自定义标签

public function boot(){
    Blade::directive('DIYLabelName',function($inputParam){
    return "<?php echo "这里就是定义调用该自定义标签时输出的PHP代码".$inputParam; ?>";
});
}

调用自定义标签

然后在视图文件中就可以调用自定义标签:

@DIYLabelName(',然后这样传入参数');

清除视图缓存

php artisan view:clear
# 我猜可能还有一条命令是缓存视图的
php artisan view:cache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值