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语法(4)
Oct 09 PHP
php 小乘法表实现代码
Jul 16 PHP
检查php文件中是否含有bom的函数
May 31 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP比你想象的好得多
Nov 27 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP微信分享开发详解
Jan 14 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解码unicode编码的中文字符代码分享
2014/08/13 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
Linux中为php配置伪静态
2014/12/17 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
TensorFlow实现Softmax回归模型
2018/03/09 Python
PyQt5实现拖放功能
2018/04/25 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
大学生军训自我评价分享
2013/11/09 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
关于迟到的检讨书
2015/05/06 职场文书
旅游安全责任协议书
2016/03/22 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书