美文网首页
laravel中间件

laravel中间件

作者: 布尔教育 | 来源:发表于2017-02-14 15:08 被阅读0次

在了解一些基础的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']);

把中间注册到控制器路由上,与基础路由有一定的区别,

zjj.png

这些呢是一些非常简单的中间件使用,直接在路由中去注册然后使用
去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';
}]);

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

相关文章

  • laravel Pipeline 原理的详细解析

    laravel 中间件使用了 Pipeline vendor\laravel\framework\src\Illu...

  • Laravel学习笔记-中间件

    Laravel 中间件是什么? 简而言之,中间件在 laravel 中的作用就是过滤 HTTP 请求,根据不同的请...

  • [教程] 大白话 Laravel 中间件

    文章转自:https://learnku.com/laravel/t/27426 Laravel 中间件是什么? ...

  • Laravel 文档阅读:中间件

    简介 中间件用来过滤项目中的 HTTP 请求,实际上 Laravel 项目中大量使用了中间件。例如,Laravel...

  • 64. 中间件

    Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。 Laravel 自带了一些中间件,包...

  • 翻译

    Laravel 的路由中间件 简介 创建中间件 注册中间件全局中间件为路由指定中间件中间件组 中间件参数 Term...

  • Laravel中间件

    在Laravel有两种类型的中间件:全局中间件、路由中间件$middleware属性用于注册全局中间件,$rout...

  • 69. 请求 输入数据的预处理和规范化

    在 Laravel 的全局中间件中默认包含了 TrimStrings 和 ConvertEmptyStringsT...

  • Laravel 中的面试题(一)

    1、什么是http中间件? HTTP中间件是一种用于过滤HTTP请求的技术。Laravel包含一个中间件,用 于检...

  • 9月19日知识点记录

    一.Laravel下SESSION的使用 1.创建session中间件 2.注册中间件 3.上传值到SESSION...

网友评论

      本文标题:laravel中间件

      本文链接:https://www.haomeiwen.com/subject/mdwxwttx.html