将从文档,中间键使用步骤和两个实例,在自己理解上进行解释
laravel官方文档理解
- 目录位置
所有的中间键全部在app/Http/Middelware
目录下 . - 中间键类型
前置中间件—— 运行在应用程序处理http请求之前.
后置中间件—— 运行应用程序处理http请求之后.
Terminable 中间件 ——http响应到浏览器以后执行. - 作用
http中间键的目的是用于过滤http请求,达到比如权限控制,sql语句打印等操作. -
kernel.php
注册中间键文件
protected $middleware = [] -----全局中间键,所有http请求都需要经过的中间键,无需在路由上面进行添加.
protected $routeMiddleware = [] ----单个的中间键,使用灵活,需要在路由文件里面进行分配.
protected $middlewareGroups = [] ----中间键组,比如某一块路由都需要经过这些好几个中间键的处理,那么你就可以注册在这里,进行统一命名,统一调用.
中间键的使用步骤
- 创建中间键
php artisan make:middleware LoginMiddleware --创建一个登陆验证中间键
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// 检查session,判断用户登录状态.
if (!session()->has("user")) {
return redirect("/login");
}
return $next($request);
}
```
2. 注册中间键
*注册中间键有三个地方都可以注册,需要根据中间的业务需求选择合适的位置*
```
'login' => \App\Http\Middleware\LoginMiddleware::class ---注册登录中间键到`$middlewareGroups`,并且命名为login,方便调用.
```
3. 已经注册的中间键使用
```
Route::resource("login", "LoginController"); ---用于登录和登录验证的资源路由
Route::group(['middleware' => ['login']], function () {
Route::group(['prefix' => 'Admin',"namespace" => 'Admin'], function() {
Route::resource("User", "UserController"); ---所有关于用户数据的查看都需要,login中间键验证通过
});
});
```
### 示例讲解
**sql语句打印**
1. 生成中间键
```
php artisan make:middleware BeforeMiddleware ---前置中间键
php artisan make:middleware AfterMiddleware ---后置中间键
```
前置中间键`BeforeMiddleware`中:
```
public function handle($request, Closure $next)
{
echo "before";
DB::enableQueryLog(); // 记录SQL请求.
return $next($request);
}
```
后置中间键`AfterMiddleware`中
```
public function handle($request, Closure $next)
{
echo "after";
$response = $next($request);
$queries = DB::getQueryLog(); //写入SQL到文件中,$queries为一个数组.
file_put_contents("/vagrant/log/sql.log",json_encode($queries).PHP_EOL,FILE_APPEND);
return $response;
}
```
2. 注册中间键
```
//全局注册,无需在路由中分配.
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\BeforeMiddleware::class,
\App\Http\Middleware\AfterMiddleware::class,
];
```
3. 执行一个sql语句查询
```
$user = DB::select("select * from mytable");
```
4. 查看sql语句
```
[{"query":"select * from gc_user","bindings":[],"time":0.34}]
```
[laravel-china官方文档](http://d.laravel-china.org/docs/5.3/middleware)
**博主 QQ:1347782976,有疑问欢迎骚扰! 另外 如果对您实用,请点赞,对我的分享鼓励下**
网友评论