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常用开发函数解析之数组篇[未完结]
Jul 30 PHP
php设计模式小结
Feb 15 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
orm获取关联表里的属性值
Apr 17 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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
Laravel5权限管理方法详解
2016/07/26 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
javascript 写类方式之三
2009/07/05 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python实现键盘输入的实操方法
2019/07/16 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
使用Python封装excel操作指南
2021/01/29 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
学生干部的自我评价分享
2014/01/18 职场文书
市场开发计划书
2014/05/07 职场文书
小学新教师个人总结
2015/02/05 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
高考1977观后感
2015/06/04 职场文书
协议书格式模板
2016/03/24 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android