.blade
, 则会被laravel视为 blade
模板引擎的模板, 经编译后生成只有PHP和HTML混编的视图文件, 存放在 /storage/framework/views
路径中, laravel实际渲染的视图文件是编译后的文件. 编译后文件, 存放在 /resources/views
目录中.使用 {{php表达式}}
的方式来渲染控制器传过来的参数值. {{}}
会把表达式的结果进行处理, 原样输出处理后的数据.
若不希望对表达式的结果进行处理, 如, 要渲染的数据含有HTML标签字符串, 希望浏览器解析这些标签字符串成为HTML元素, 则用 {!!php表达式!!}
.
在vue前端框架中, 渲染数据的方式也是 {{js表达式}}
, 跟 blade
模板引擎会产生冲突, blade
模板引擎会先渲染, 而vue将无法正常渲染数据. 可以用 @{{...}}
来告诉 blade
模板引擎不需要处理这个表达式. 这样vue就能正常渲染数据了.
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>
中间件在MVC开发中很常见, 路由解析出要执行的控制器和方法, 并创建路由器实例后, 在执行路由器的方法前, 如果需要先做其他必要的业务处理, 就需要用到中间件.
中间件脚本文件存放目录: /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);
}
}
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. 执行/触发中间件.