Laravel5.1 中间件-middleware

中间件的主要功能是在达到最终请求动作前对请求进行过滤和处理。

中间件在Laravel中有着广泛的应用,比如用户认证、日志、维护模式、开启Session、从Session中获取错误信息,以及CSRF验证,等等。

中间件的所在目录:\app\Http\Middleware。里面有一些默认的middleware

创建自己的middleware

创建middleware非常简单,我们打开终端,cd到项目目录下执行以下命令即可:

php artisan make:middleware TestMiddleware 

这样 我们就可以在\app\Http\Middleware下看见我们刚刚创建的middleware了。

<?php

namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 在这里执行我们的逻辑
        return $next($request);
    }
}

实现一个简单的逻辑

我们写一个小例子来瞧瞧,在TestMiddleware的handle方法中编辑:

    public function handle($request, Closure $next)
    {
        if ($request->input(‘age‘)<18){
            return redirect()->route(‘refuse‘);
        }
        return $next($request);
    }

在路由中使用中间件,需要在\app\Http\Kernel.php 文件中进行注册:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application‘s global HTTP middleware stack.
     *
     * @var array
     */
    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,
    ];

    /**
     * The application‘s route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        ‘auth‘ => \App\Http\Middleware\Authenticate::class,
        ‘auth.basic‘ => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        ‘guest‘ => \App\Http\Middleware\RedirectIfAuthenticated::class,
        // 这是我们注册的middleware:
        ‘test‘ => \App\Http\Middleware\TestMiddleware::class,
    ];
}

注意:我们将testmiddleware注册到了 $routeMiddleware变量中,laravel的注释写的很清楚 如果我们要在全局都使用到这个middleware 就把他注册到$middleware变量中

接下来我们就可以在路由中使用middleware了:

Route::group([‘prefix‘=>‘laravel‘, ‘middleware‘=>‘test‘], function (){
    Route::get(‘/write‘, function (){
        return ‘Write laravel‘;
    });
    Route::get(‘/update‘, function (){
        return ‘Update laravel‘;
    });
});

Route::get(‘/age/refuse‘,[‘as‘=>‘refuse‘, function(){
    return ‘您的年龄未满18岁‘;
}]);

我们在浏览器这样访问来测试:localhost:8000/laravel/write?age=15 或 localhost:8000/laravel/update?age=20

在请求后执行动作

有些时候,我们需要在请求后执行一些动作,可以这样写:

    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // 执行一些动作

        return $response;
    }

当然,必要的业务逻辑也有在请求前做认证,在请求后做一些动作的情况。

带参数的Middleware

除了请求实例$request和闭包$next之外,中间件还可以接收额外参数,我们还是以TestMiddleware为例,现在要求年龄在18岁以上的男性才能访问指定页面,handle方法定义如下:

    public function handle($request, Closure $next, $gender)
    {
        if ($request->input(‘age‘)>=18 && $gender==$request->input(‘gender‘)){
            return $next($request);
        }
        return redirect()->route(‘refuse‘);
    }

对应的修改路由:

// 使用:语法为middleware传入参数
Route::group([‘prefix‘=>‘laravel‘, ‘middleware‘=>‘test:male‘], function (){
    Route::get(‘/write‘, function (){
        return ‘Write laravel‘;
    });
    Route::get(‘/update‘, function (){
        return ‘Update laravel‘;
    });
});

Route::get(‘/age/refuse‘,[‘as‘=>‘refuse‘, function(){
    return ‘本站只允许满18岁的男士访问‘;
}]);
时间: 2024-10-09 05:11:24

Laravel5.1 中间件-middleware的相关文章

中间件(Middleware)

中间件(Middleware) ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组分在管道中调用之后执行特定操作. 具体如图: 开发中间件(Middleware) 今天我们来实现一个记录ip 的中间件. 1.新建一个asp.net core项目,选择空的模板. 然后为项目添加一个 Microsoft.Extensions.Logging.Conso

ASP.NET Core 开发-中间件(Middleware)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-razor-layout.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-view-start.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-import-view.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-razor-tag

ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因为WCF中不仅仅只是有SOAP, 它还包含很多如消息安全性,生成WSDL,双工信道,非HTTP传输等. ASP.NET Core 官方推荐大家使用RESTful Web API的解决方案提供网络服务. SOAP 即 Simple Object AccessProtocol 也就是简单对象访问协议.

Django框架之中间件MiddleWare

Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性.我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预. 中间件的原理其实就是定义了一个装饰器,但是这个装饰器可以对整个项目中的所有方法进行装饰: 我们可以通过中间件,对请求对象和响应对象进行相应的干预操作. 实现中间件的流程: 1.在子应用中编写一个middleware.p

laravel5 的中间件的使用 (1)

1.创建中间件 php artisan make:middleware _Name_Middleware 2.注册中间件 2.1 中间件注册在 Kennel.php 里面 2.2 默认的存放在此处,会自动调用 /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ pr

django之中间件middleware

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图. 与mange.py在同一目录下的文件夹 wupeiqi/middleware下的auth.py文件中的Authentication类 中间件中可以定义四个方法,分别是: process_r

利用Django中间件middleware解决用户未登录问题(转)

add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可

django 自定义中间件 middleware

Django 中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC. Django在中间件中预置了五个方法,这五个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下: 1)初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件. def __init__(

Django 详解 中间件Middleware

Django中间件 还是涉及到django的请求生命周期.middle ware 请求穿过中间件到达url,再经过中间件返回给用户. 简单实例 django项目根目录新建一个Middle文件夹,再新建一个test.py文件 在test文件中写入:其中的类必须继承 from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin class M1(Mid