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 相关文章推荐
PHP4.04简明安装
Oct 09 PHP
解析yii数据库的增删查改
Jun 20 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
php获取linux命令结果的实例
Mar 13 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
php实现的pdo公共类定义与用法示例
Jul 19 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
ECMAScript6--解构
2017/03/30 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
python实现SMTP邮件发送功能
2020/06/16 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
安全生产标语
2014/06/06 职场文书
安全员岗位职责范本
2015/04/11 职场文书
简爱读书笔记
2015/06/26 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers