经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
Laravel实现通过blade模板引擎渲染视图
来源:jb51  时间:2019/10/25 11:04:47  对本文有异议

laravel提供了blade模板引擎用于视图的渲染,在blade中可以直接使用PHP代码,并且blade最终也会被编译为php缓存起来,只有在blade文件被修改后才会重新编译,这一点可以节省开销提高应用性能。blade文件.blade.php作为视图文件存放于laravel的resource/views目录下。

1、定义模板

blade定义模板页面同创建html页面一样,只不过在适当的位置通过@section或@yield来占位,当其它页面引用模板页时将内容填充到占位的位置即可

  1. <html>
  2. <head>
  3. <title>@yield('title')</title>
  4. </head>
  5. <body>
  6. <header class="header">
  7. @section('header')
  8. 这是头部<br>
  9. @show
  10. </header>
  11. <div class="middle">
  12. <aside class="aside">
  13. 这是侧边栏
  14. @yield('aside')
  15. </aside>
  16. <div class="content">
  17. @section('content')
  18. 这是主体内容
  19. @show
  20. </div>
  21. </div>
  22. <footer class="footer">
  23. 这是底部
  24. @yield('footer')
  25. </footer>
  26. </body>
  27. </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:

  1. @extends('template.layout') {{--引入模板views/template/layout.blade.php--}}
  2.  
  3. @section('title')
  4.  
  5. 登录界面
  6.  
  7. @stop
  8.  
  9. @section('header') {{--填充到header对应的占位符--}}
  10.  
  11. @parent {{--保留模板原内容--}}
  12.  
  13. 头部替换内容
  14.  
  15. @stop

引入组件:通过@component来引入组件模板。比如定义了一个通用的错误提示组件alert:

  1. <div style="color: #ff5b5d;">
  2. <h5>{{$title}}</h5>
  3. {{$slot}}
  4. </div>

在页面中使用该组件:

  1. @component('template.alert') {{--引入组件views/template/alert.blade.php--}}
  2. @slot('title') {{--指定替代组件中的$title位置--}}
  3. alert标题
  4. @endslot
  5. alert组件内容
  6. @endcomponent

@component~@endcomponent之间的内容会自动替代组件{{$slot}},如果要指定替代的位置,可以通过@slot()~@endslot

引入子视图:在一个页面中如果希望引入一个blade子视图,可以通过@include()

  1. @include('template.child')

在blade中输出变量通过{{$var}},其中的语句已经经过 PHP 的 htmlentities 函数处理以避免 XSS 攻击。例如在controller中引入view时传入变量参数:

  1. public static function showBlade(){
  2. return view('Login.login',['var'=>'test']);
  3. }

在blade中使用该变量

变量为:{{isset($var)? $var : '默认值'}}

有时候我们希望blade不要对文本进行解析,原样输出,比如在vue中也使用{{}}包裹变量,我们不希望blade对其进行编译,这时可以使用@:

原文本输出:@{{ $var }}

3、流程控制

blade提供了一套流程控制语句来对页面的渲染进行控制,使页面的渲染更为快捷,并且这些控制语句都是和PHP非常类似的。

if判断:

  1. @if ($val >80)
  2. 优秀
  3. @elseif ($val>60)
  4. 及格
  5. @else
  6. 不及格
  7. @endif

循环:

  1. @for ($i = 0; $i < 10; $i++)
  2. The current value is {{ $i }}
  3. @endfor
  4. @foreach ($users as $user)
  5. <p>This is user {{ $user->id }}</p>
  6. @endforeach

switch分支:

  1. @switch($i)
  2. @case(1)
  3. First case...
  4. @break
  5. @case(2)
  6. Second case...
  7. @break
  8. @default
  9. Default case...
  10. @endswitch

认证:@auth 和 @guest 指令可用于快速判断当前用户是否登录:

  1. @auth
  2. // 用户已登录...
  3. @endauth
  4. @guest
  5. // 用户未登录...
  6. @endguest

以上这篇Laravel实现通过blade模板引擎渲染视图就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号