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 ?>
包裹, 编写起来比较繁琐.
<body>
<table class="layui-table">
<thead>
<tr>
<td>ID</td>
<td>用户组名称</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<!-- if...else...判断 -->
@if(!empty($groups))
<!-- foreach循环 -->
@foreach($groups ad $group)
<tr>
<td>{{$group['id']}}</td>
<td>{{$group['title']}}</td>
<td>
<span class="layui-btn layui-btn-success">修改</span>
<span class="layui-btn layui-btn-warm">删除</span>
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="3">啥也没查到...</td>
</tr>
@endif;
</tbody>
</table>
</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
<?php
namespace App\Http\Middleware;
use Closure;
class MyMiddle {
/**
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
// 中间件处理逻辑...
return $next($request);
}
}
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. 执行/触发中间件.