Laravel 5.4 官方文档摘记:视图

来源:互联网 发布:网上装修设计软件 编辑:程序博客网 时间:2024/05/18 03:19

模板

简介

所有的视图都保存在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')@parentparent标签会将基础模板的内容也显示出来@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
原创粉丝点击