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 相关文章推荐
动态新闻发布的实现及其技巧
Oct 09 PHP
php 在线打包_支持子目录
Jun 28 PHP
php&amp;mysql 日期操作小记
Feb 27 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
php实现评论回复删除功能
May 23 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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/28 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
Python的时间模块datetime详解
2017/04/17 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Django实现内容缓存实例方法
2020/06/30 Python
python 如何区分return和yield
2020/09/22 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
打架检讨书2000字
2014/02/22 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
技术股东合作协议书
2014/12/02 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android