Blogger Information
Blog 57
fans 3
comment 0
visits 60547
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
laravel基础-blade模板引擎和中间件
岂几岂几
Original
924 people have browsed it

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. 执行/触发中间件.

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:laravel的模板机制还是比较简单的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post