博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel学习笔记(三)视图渲染
阅读量:5227 次
发布时间:2019-06-14

本文共 2879 字,大约阅读时间需要 9 分钟。

1、模板继承

  1)定义模板

    示例如下

   a)主模板(resources/views/common/layout.blade.php):

            @yield('title')                @section('topbar')            主页面顶部内容        @show        
@yield('content')

  其中@section('xxx')...@show和@yield('xxx')都是用来显示继承模板中指定块的内容的,只是@section('xxx')...@show之间的内容可以被继承模板通过@parent的方式获取

  b)继承模板(resources/views/home/home.blade.php):

@extends('common.layout')@section('title', '标题')@section('topbar')    @parent    

子页面顶部内容

@stop
@section('content')   

子页面主体内容

@stop

  其中@extends指令用来指定子页面所继承的布局,@section('xxx', '内容')和@section('xxx')...@stop用来定义指定块的内容,@parent用来追加主模板中指定块原有的内容

2、包含子视图

  Blade的@include指令允许在一个视图中包含另一个Blade视图,所有父级视图中变量在被包含的子视图中依然有效,如下:

@include('文件夹.子视图')

  如果需要传递额外的变量,可以通过如下方式

@include('文件夹.子视图', ['参数名' => '参数值'])

  如果要包含一个有可能不存在的视图,可以使用 @includeIf 指令,如下:

@includeIf('文件夹.子视图', ['参数名' => '参数值'])

  如果包含的视图取决于一个给定的布尔条件,可以使用 @includeWhen 指令:

@includeWhen($boolean, '文件夹.子视图', ['参数名' => '参数值'])

  要包含给定数组中的第一个视图,可以使用 @includeFirst 指令:

@includeFirst(['文件夹1.子视图1', '文件夹2.子视图2'], ['参数名' => '参数值'])

  如果要循环引入多个局部视图,可以使用 @each 指令:

@each('文件夹.子视图', $参数数组, '子视图中的参数名')

  在子视图中,可以通过$子视图中的参数名获取$参数数组中对应的值,且可以通过key变量访问当前迭代的键值,如在$参数数组为空时,需要引用其他子视图的话,可以增加第四个变量,如下:

@each('文件夹.子视图', $参数数组, '子视图中的参数名','文件夹.为空时的子视图')

3、堆栈

  Blade 允许你推送内容到命名堆栈,以便在其他视图或布局中渲染。这方便在子视图中引入指定JavaScript和css库,如下:

@push('scripts')    @endpush

  推送次数不限,要渲染完整的堆栈内容,传递堆栈名称到 @stack 指令即可:

    @stack('scripts')

4、服务注入

  @inject指令可以用于从服务容器中获取服务,传递给 @inject 的第一个参数是服务对应的变量名,第二个参数是要解析的服务类名或接口名:

@inject('metrics', 'App\Services\MetricsService')
Monthly Revenue: {
{ $metrics->monthlyRevenue() }}.

5、Blade其他指令

  1)可以使用 @if , @elseif , @else 和 @endif 来构造 if 语句,这些指令的功能和 PHP 相同,如下:

@if (count($records) === 1)    I have one record!@elseif (count($records) > 1)    I have multiple records!@else    I don't have any records!@endif

  2)为方便起见,Blade 还提供了 @unless...@endunless 指令,表示除非,如下:

@unless (1==1)    1!=1@endunless

  3)此外,Blade 还提供了 @isset...@endisset、@empty...@endempty、@switch...@endswitch、@case、@break、@default、@for...@endfor、@foreach...@endforeach、@forelse...@empty...@endforelse、@while...@endwhile等方法,起到判断和循环的作用,如在循环中,可以通过$loop变量判断当前循环的状态,$loop变量的属性如下:

  

 6、自定义blade指令

  如需自定义blade指令,可以在app/Providers/AppServiceProvider.php的boot方法中增加如下代码:

\Blade::directive('datetime', function($expression) {	return "
";});

  然后在blade模板中通过如下方式引用:

@datetime(1508888888)

  注:更新完 Blade 指令逻辑后,必须删除所有的 Blade 缓存视图。缓存的 Blade 视图可以通过 Artisan 命令 view:clear 移除。

  如还想自定义if语句,可以在boot方法中通过Blade::if 方法定义:

\Blade::if('env', function ($environment) {	return app()->environment($environment);});

  在blade模板中使用方式如下:

@env('local')    The application is in the local environment...@else    The application is not in the local environment...@endenv

  

转载于:https://www.cnblogs.com/fengzmh/p/10254262.html

你可能感兴趣的文章
Java -- Swing 组件使用
查看>>
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
MongoDB的数据库、集合的基本操作
查看>>
ajax向后台传递数组
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
[转载]树、森林和二叉树的转换
查看>>
WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
查看>>
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>