博客列表 >laravel基础-blade模板引擎和中间件

laravel基础-blade模板引擎和中间件

岂几岂几
岂几岂几原创
2020年06月24日 02:00:09916浏览

laravel基础-blade模板引擎和中间件

1. blade模板引擎的基础用法

  • 若视图文件名中包含 .blade , 则会被laravel视为 blade 模板引擎的模板, 经编译后生成只有PHP和HTML混编的视图文件, 存放在 /storage/framework/views 路径中, laravel实际渲染的视图文件是编译后的文件. 编译后文件, 存放在 /resources/views 目录中.

渲染值

  • 使用 {{php表达式}} 的方式来渲染控制器传过来的参数值. {{}} 会把表达式的结果进行处理, 原样输出处理后的数据.

  • 若不希望对表达式的结果进行处理, 如, 要渲染的数据含有HTML标签字符串, 希望浏览器解析这些标签字符串成为HTML元素, 则用 {!!php表达式!!} .

  • 在vue前端框架中, 渲染数据的方式也是 {{js表达式}} , 跟 blade 模板引擎会产生冲突, blade 模板引擎会先渲染, 而vue将无法正常渲染数据. 可以用 @{{...}} 来告诉 blade 模板引擎不需要处理这个表达式. 这样vue就能正常渲染数据了.

if判断和foreach/for/while循环

  • blade 模板引擎中, if判断(包括if…else…)和foreach/for/while循环, 使用类似php中的模板语法. 在 blade 模板引擎中, 以 @ 开头就可以, 而php中的模板语法, 需要用 <?php ?> 包裹, 编写起来比较繁琐.
  1. <body>
  2. <table class="layui-table">
  3. <thead>
  4. <tr>
  5. <td>ID</td>
  6. <td>用户组名称</td>
  7. <td>操作</td>
  8. </tr>
  9. </thead>
  10. <tbody>
  11. <!-- if...else...判断 -->
  12. @if(!empty($groups))
  13. <!-- foreach循环 -->
  14. @foreach($groups ad $group)
  15. <tr>
  16. <td>{{$group['id']}}</td>
  17. <td>{{$group['title']}}</td>
  18. <td>
  19. <span class="layui-btn layui-btn-success">修改</span>
  20. <span class="layui-btn layui-btn-warm">删除</span>
  21. </td>
  22. </tr>
  23. @endforeach
  24. @else
  25. <tr>
  26. <td colspan="3">啥也没查到...</td>
  27. </tr>
  28. @endif;
  29. </tbody>
  30. </table>
  31. </body>

2. laravel中的中间件

2.1 laravel中的中间件介绍

  • 中间件在MVC开发中很常见, 路由解析出要执行的控制器和方法, 并创建路由器实例后, 在执行路由器的方法前, 如果需要先做其他必要的业务处理, 就需要用到中间件.

    • 中间件的经典使用场景: 1. 执行业务操作前验证用户是否登录; 2. 执行业务操作前验证当前登录用户是否有权限.
  • 中间件脚本文件存放目录: /app/Http/Middleware .

  • 创建中间件类

    • 可以是一个普通的类. 不需要继承任何基类. 可以直接在 /app/Http/Middleware 目录中新建中间件类.
    • 也可以使用 artisan 命令创建中间件: php artisan make:middleware 中间件类名 .
  • 中间件类的结构

    • 必须有一个 handle($request, Closure $next) 方法, 方法最后必须 return $next($request); .

    • 形参中的 $request 对象是laravel封装的一个包含前端请求的所有信息的对象.

    • $next

  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. class MyMiddle {
  5. /**
  6. * @param \Illuminate\Http\Request $request
  7. * @param \Closure $next
  8. * @return mixed
  9. */
  10. public function handle($request, Closure $next) {
  11. // 中间件处理逻辑...
  12. return $next($request);
  13. }
  14. }

2.2 使用中间件

  • 1- 创建中间件, 参考上一小节.

  • 2- 注册中间件.

    • /app/Http/Kernel.php 中注册中间件.
    • 注册到 $middleware 属性中的中间件, 任何请求都会触发.
    • 注册到 $middlewareGroups 属性中的中间件, 在指定名称的路由组(默认配置中的’web’, ‘api’为路由组名)中执行.
    • 注册到 $routeMiddleware 属性中的中间件, 在路由中可以用 middleware(中间件注册名或中间件注册名数组) 来指定, 并由这条路由规则触发. 如: Route::get('/admin/home/welcome', 'admins\Home@welcome')->middleware(['auth', 'right.check']); .
    • 注册方式仿照 Kernel.php 中已注册的中间件即可.
  • 3- 执行/触发中间件.

    • 在路由文件中定义路由组, 或声明某条路由规则时, 指定触发的中间件/中间件数组.

    • 当有请求到达服务器, 就会在路由解析完成, 创建控制器对象后, 触发相应的中间件(可以是全局的/所属路由组绑定的/当前匹配的路由指定的中间件).

学习心得

  • blade 模板引擎是后端模板引擎, 使用它可以简化数据的渲染, 但因其需要编译, 所以效率稍稍比原生PHP代码渲染慢. 但基本可忽略不计. 正因为它是后端引擎, 所以它可能会跟前端的框架渲染数据产生冲突, 此时, 可以使用 @{{}} 来让 blade 模板引擎忽略对该表达式的渲染, 转由前端框架来渲染.

  • 中间件是在路由解析后, 控制器的方法执行前, 用来处理额外的业务逻辑的. 其经典使用场景: 1. 执行业务操作前验证用户是否登录; 2. 执行业务操作前验证当前登录用户是否有权限. 要使用中间件, 分3步走: 1. 创建中间件; 2. 注册中间件; 3. 执行/触发中间件.

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议