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创建PDF中文文档
Oct 09 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
基于PHP静态类的原罪详解
May 06 PHP
深入php self与$this的详解
Jun 08 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
php文件上传原理与实现方法详解
Dec 20 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP递归算法的简单实例
2019/02/28 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
Vue组件化开发思考
2018/02/02 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
python 下划线的不同用法
2020/10/24 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
四风查摆剖析材料
2014/10/10 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
导游词之江南周庄
2019/12/06 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
Python内置数据类型中的集合详解
2022/03/18 Python