Laravel实现通过blade模板引擎渲染视图


Posted in PHP onOctober 25, 2019

laravel提供了blade模板引擎用于视图的渲染,在blade中可以直接使用PHP代码,并且blade最终也会被编译为php缓存起来,只有在blade文件被修改后才会重新编译,这一点可以节省开销提高应用性能。blade文件.blade.php作为视图文件存放于laravel的resource/views目录下。

1、定义模板

blade定义模板页面同创建html页面一样,只不过在适当的位置通过@section或@yield来占位,当其它页面引用模板页时将内容填充到占位的位置即可

<html>
 <head>
  <title>@yield('title')</title>
 </head>
 <body>
  <header class="header">
   @section('header')
    这是头部<br>
   @show
  </header>
  <div class="middle">
   <aside class="aside">
    这是侧边栏
    @yield('aside')
   </aside>
   <div class="content">
    @section('content')
    这是主体内容
    @show
   </div>
  </div>
  <footer class="footer">
   这是底部
   @yield('footer')
  </footer>
 </body>
</html>

section与yield都是占位符,其区别体现在引用模板时,当使用yield时会完全将指定的占位符替换掉,而使用section时可以通过@parent来保留@section()~@show之间的内容。

如果需要在blade中引入外部js、css文件可以采用相对public目录的绝对路径,例如引入自带的bootstrap,位于public/css/app.css,可以<link rel="stylesheet" href="{{ asset('./css/app.css')}}" rel="external nofollow" >

2、引用模板

引用模板首先需要通过@extends()引入你需要使用的模板,模板位置相对于views目录。然后通过@section()~@stop(注意与定义模板时的@section~@show区别),将你所需要替换的内容填充到模板的指定位置,例如要填充header对应的section:

@extends('template.layout')  {{--引入模板views/template/layout.blade.php--}}

@section('title')

登录界面

@stop

@section('header')    {{--填充到header对应的占位符--}}

@parent      {{--保留模板原内容--}}

头部替换内容

@stop

引入组件:通过@component来引入组件模板。比如定义了一个通用的错误提示组件alert:

<div style="color: #ff5b5d;">
 <h5>{{$title}}</h5>
 {{$slot}}
</div>

在页面中使用该组件:

@component('template.alert') {{--引入组件views/template/alert.blade.php--}}
 @slot('title')    {{--指定替代组件中的$title位置--}}
  alert标题
 @endslot
 alert组件内容
@endcomponent

@component~@endcomponent之间的内容会自动替代组件{{$slot}},如果要指定替代的位置,可以通过@slot()~@endslot

引入子视图:在一个页面中如果希望引入一个blade子视图,可以通过@include()

@include('template.child')

在blade中输出变量通过{{$var}},其中的语句已经经过 PHP 的 htmlentities 函数处理以避免 XSS 攻击。例如在controller中引入view时传入变量参数:

public static function showBlade(){
 return view('Login.login',['var'=>'test']);
}

在blade中使用该变量

变量为:{{isset($var)? $var : '默认值'}}

有时候我们希望blade不要对文本进行解析,原样输出,比如在vue中也使用{{}}包裹变量,我们不希望blade对其进行编译,这时可以使用@:

原文本输出:@{{ $var }}

3、流程控制

blade提供了一套流程控制语句来对页面的渲染进行控制,使页面的渲染更为快捷,并且这些控制语句都是和PHP非常类似的。

if判断:

@if ($val >80)
 优秀
@elseif ($val>60)
 及格
@else
 不及格
@endif

循环:

@for ($i = 0; $i < 10; $i++)
 The current value is {{ $i }}
@endfor
 
@foreach ($users as $user)
 <p>This is user {{ $user->id }}</p>
@endforeach

switch分支:

@switch($i)
 @case(1)
  First case...
  @break
 
 @case(2)
  Second case...
  @break
 
 @default
  Default case...
@endswitch

认证:@auth 和 @guest 指令可用于快速判断当前用户是否登录:

@auth
 // 用户已登录...
@endauth
 
@guest
 // 用户未登录...
@endguest

以上这篇Laravel实现通过blade模板引擎渲染视图就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP教程 变量定义
Oct 23 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
JS 网站性能优化笔记
May 24 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
php array的学习笔记
May 16 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
php新建文件的方法实例
Sep 26 PHP
laravel 解决Validator使用中出现的问题
Oct 25 #PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 #PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 #PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 #PHP
Laravel validate error处理,ajax,json示例
Oct 25 #PHP
laravel 错误处理,接口错误返回json代码
Oct 25 #PHP
laravel 实现用户登录注销并限制功能
Oct 24 #PHP
You might like
显示程序执行时间php函数代码
2013/08/29 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python自动化生成IOS的图标
2018/11/13 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
Python如何将装饰器定义为类
2020/07/30 Python
python实现图片转字符画
2021/02/19 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
一年级班主任寄语
2014/01/19 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
2014年工程师工作总结
2014/11/25 职场文书
入党介绍人意见范文
2015/06/01 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
离婚民事起诉状
2015/08/03 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python如何利用traceback获取详细的异常信息
2021/06/05 Python