中间件

在了解一些基础的laravel知识后,可以试着去了解laravel一些功能强大并且特有的知识点,比如中间件,那么官方给它的定义是:HTTP 中间件为过滤访问你的应用的 HTTP 请求提供了一个方便的机制。例如,Laravel 默认包含了一个验证用户的中间件。如果没有经过身份验证,中间件将会将用户重定向至登录页面。然而,如果用户经过了验证,中间件将会允许请求继续在应用中执行下去。个人理解是,中间件就是放到方法前和方法后去执行,然后影响执行的效果.
那么laravel中的中间件事定义在哪里呢?
app\http\Middleware我们定义的中间件是在这个目录下,那么中间件除了有影响方法的效果,还有什么样的机制呢??

定义中间件

既然使用中间件,就必须去定义,那么怎么去定义呢?
之前了解过artisan工具,那么它是否可以帮助我们呢?
php artisan make:middleware EmailMiddleware
这样的一条命令即可,执行之后会在定义的目录下多出一个EmailMiddleware的中间件


<?php

namespace App\Http\Middleware;

use Closure;

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

            return  $next($request);

    }
}

以上的php文件就是中间件的内容,只有一个方法,handle里面的两个参数,一个是request对象,那么在laravel中是一个请求的意思,同样的还有一个$next方法,直接return,个人理解就是用next方法去处理在路由中的请求信息
可能大家会有疑问,中间件就这么点东西么?不是的
现在只是定义了中间件,如何去使用呢?

注册中间件

最简单的方法是在路由中或控制器中去使用
- 注册中间件到路由


//app/routes.php
Route::get('test',['middleware'=>'App\Http\Middleware\EmailMiddleware',function(){

echo 'hello';

}])
//app\http\Middleware\EmailMiddleware
public function handle($request, Closure $next)
{               
        $rs = $next($request);
        echo 'world';
        return $rs;        
}

运行test这个actionresponse的是

hello world

但是在路由中请求信息是hello,为什么给返回的是hello world呢,这就是中间件起到的作用,我们在请求信息之后,执行了一个 echo world的响应信息,这是中间件的简单应用
刚才呢,是把中间件注册到基础路由上,如果注册到控制器路由呢,应该怎么样去使用
- 注册中间件到控制器路由

Route::get('index',['middleware'=>'App\Http\Middleware
\EmailMiddleware','uses'=>'IndexController']);

把中间注册到控制器路由上,与基础路由有一定的区别,
这里写图片描述

这些呢是一些非常简单的中间件使用,直接在路由中去注册然后使用
去laravel做过项目的同学可能都知道,每当去post的提交的时候,就会报一个Token的错误,那这个错误,为什么每次去post的提交都会报错呢,仔细去看,在app\http\middleware下有个VerifyCsrfToken.php这样的中间件,然后laravel官方呢把这个中间件给注册到全局上,就是app\Kernel.php

    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,//token的验证
    ];
    //在路由中声明的中间件
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    ];

每当我们去提交的时候就会报token的错误

所以呢,我们也可以把中间件给注册到Kerner.php中,如

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'Email' => \App\Http\Middleware\EmailMiddleware::class,//新声明的中间件
    ];

在路由中调用这样就可以了,如

Route::get('test',['middleware'=>'Email',function(){
    echo 'hello';
}]);

这些呢就是中间件的使用,欢迎学习!!!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值