laravel框架—中间键

将从文档,中间键使用步骤和两个实例,在自己理解上进行解释

laravel官方文档理解

  1. 目录位置
    所有的中间键全部在 app/Http/Middelware 目录下 .
  2. 中间键类型
    前置中间件—— 运行在应用程序处理http请求之前.
    后置中间件—— 运行应用程序处理http请求之后.
    Terminable 中间件 ——http响应到浏览器以后执行.
  3. 作用
    http中间键的目的是用于过滤http请求,达到比如权限控制,sql语句打印等操作.
  4. kernel.php注册中间键文件
protected $middleware = []   -----全局中间键,所有http请求都需要经过的中间键,无需在路由上面进行添加.
protected $routeMiddleware = []  ----单个的中间键,使用灵活,需要在路由文件里面进行分配.  
protected $middlewareGroups = [] ----中间键组,比如某一块路由都需要经过这些好几个中间键的处理,那么你就可以注册在这里,进行统一命名,统一调用.

中间键的使用步骤

  1. 创建中间键
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,有疑问欢迎骚扰! 另外 如果对您实用,请点赞,对我的分享鼓励下**

你可能感兴趣的:(laravel框架—中间键)