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数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
初品cakephp 入门基础
Feb 16 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
PHP加密解密类实例分析
Apr 20 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
PHP解决高并发的优化方案实例
Dec 10 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/06/21 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
使用python Django做网页
2013/11/04 Python
讲解Python中的标识运算符
2015/05/14 Python
python开发之for循环操作实例详解
2015/11/12 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
Python面向对象进阶学习
2019/05/21 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
护士自我评价
2014/02/01 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
大学生村官承诺书
2014/03/28 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
雷人标语集锦
2014/06/19 职场文书
趣味运动会开幕词
2015/01/28 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2015年国培研修感言
2015/08/01 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
python实现自动化群控的步骤
2021/04/11 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS