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
这玩意很好!
注释
Blade模板引擎的注释是:{{--这里填写注释语句--}}
PHP代码
@php @endphp
子视图
@include()
当有路径问题时,也是使用.
来代表文件夹。
当然,也可以往子视图中传入参数:@include('subView',['key'=>'value'])
堆栈
直接看例子吧,我觉得是蛮鬼畜的:
@push('anyName') <script src='/scriptName.js'></script>@endpush
这里的@push
就是将一个key
为anyName
,value
为<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
- Laravel 5.4 官方文档摘记:视图
- Laravel 5.4 官方文档摘记:路由
- Laravel 5.4 官方文档摘记:中间件
- Laravel 5.4 官方文档摘记:CSRF保护
- Laravel 5.4 官方文档摘记:控制器
- Laravel 5.4 官方文档摘记:请求实例
- Laravel 5.4 官方文档摘记:响应
- Laravel 5.4 官方文档摘记:View类
- Laravel 5.4 官方文档摘记:验证
- Laravel 5.4 官方文档摘记:Eloquent ORM
- Laravel 5.4 官方文档摘记:Laravel操作数据库
- Vue.js官方文档摘记
- Vue.js 官方文档摘记:Vue 实例
- Vue.js 官方文档摘记:模板语法
- Vue.js 官方文档摘记 计算属性
- React.js 官方文档摘记:表单
- Laravel 5.4 官网资料摘记:Session
- Vue.js 官方文档摘记 class和style绑定
- 用PowerDesigner15自动将数据库里的表生成ER图
- 走过最长的路是你的套路(PS调色-V客学院技术分享)
- linux下php调用unoconv命令将doc,ppt转pdf,pdf在转图片
- Linux CRC校验
- Vue中保存用户登录状态
- Laravel 5.4 官方文档摘记:视图
- Windows下安装DB2-Express-C并创建schema测试连接
- 精通比特币
- Android 7.0 行为变更 通过FileProvider在应用间共享文件吧
- 被拒后的两种操作
- CSI.SAP2000.v19.1.1 Win32_64 2CD通用有限元软件
- PHP后台获取每天新增用户
- mysql 死锁日志查看
- dirname(__FILE__) 与 PHP define() 及例子define('root',dirname(__file__)) (2011-04-01 11:09:48)转载▼ 标签: di