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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
PHP 时间日期操作实战
Aug 26 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
php查询whois信息的方法
Jun 08 PHP
PHP概率计算函数汇总
Sep 13 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
round robin权重轮循算法php实现代码
May 28 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PDO::prepare讲解
2019/01/29 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
JS启动应用程序的一个简单例子
2008/05/11 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Django日志及中间件模块应用案例
2020/09/10 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
大宝sod蜜广告词
2014/03/21 职场文书
作风建设年度心得体会
2014/10/29 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
2014年绿化工作总结
2014/12/09 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
设置IIS Express并发数
2022/07/07 Servers