laravel 中间件

中间件是什么:

类似于门卫的作用 每次请求来了先经过中间件筛查

全局中间件:

在全局生效

路由中间件:

在指定的路由生效

使用中间件的方法

1.创建中间件

php artisna make:middleware LogMiddleware

2.在LogMiddleware 中可以定义中间件需要的操作 在handle的方法里

下面是一个使用中间件生成logs文件的简单demo

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
class LogMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {

        //127.0.0.1 
        //获取用户来访的ip
       //var_dump( $_SERVER);
        $ip = $request->ip();
        $date = date("Y-m-d H:i:s");
        $url = $request->url();
        $str = $ip."在".$date."访问了".$url."\n\r";
        $filename = public_path().'/logs/'.date("ymd").".txt";
        file_put_contents($filename,$str,FILE_APPEND);

        return $next($request);
    }
}

3.注册中间件

在kernel.php中 可实现路由注册

在这个文件里边其中有三个属性

  1. protected $middleware 代表全局中间件

  2. protected $middlewareGroups 代表中间件组

  3. protected $routeMiddleware 代表路由中间件

4.注册

在你想注册的位置添加中间件

// middleware命名空间\middleware名字::class

\App\Http\Middleware\LogMiddleware::class,

注意一定要从根目录找 也就是命名空间前一定要加\

下边是一个全局中间件的demo

protected $middleware = [
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\LogMiddleware::class,
    ];

中间件的使用 全局中间件不需要使用 在全局生效
路由中间件使用

第一种方式 直接在路由后接middleware demo:

route::get("admin/index","AdminController@index")->middleware('logs');

路由组的中间件

Route::middleware('logs')->group(function () {
    route::get('index','Book\BookController@add');
    route::post('doadd','Book\BookController@doadd');
    route::any('list','Book\BookController@lists');
    route::get('login',"Book\UserController@login");
    route::post('logindo',"Book\UserController@logindo");
    route::get('register',"Book\UserController@register");
    route::post('registerdo',"Book\UserController@registerdo");

});

如果路由组多种形式的 比如前缀+中间件 可以使用下面的方式

route::group(['middleware'=>'logs','prefix'=>'book'],function(){
    route::get('index','Book\BookController@add');
    route::post('doadd','Book\BookController@doadd');
    route::any('list','Book\BookController@lists');
    route::get('login',"Book\UserController@login");
    route::post('logindo',"Book\UserController@logindo");
    route::get('register',"Book\UserController@register");
    route::post('registerdo',"Book\UserController@registerdo");
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值