laravel(七)-中间件(Middleware)

来源:互联网 发布:医药大数据 编辑:程序博客网 时间:2024/05/16 15:14

Middleware

HTTP中间件有什么用?

HTTP 中间件提供了一个便利的机制来过滤进入应用的 HTTP 请求。例如,Laravel 包含了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否则如果用户经过授权,中间件就会允许请求继续往前进入下一步操作。

中间件使用流程

创建

在\app\Http\Middleware\文件夹下新建对应的中间件,例如Register.php.

<?phpnamespace App\Http\Middleware;use Closure;class Register{    /**     * Handle an incoming request.     *     * @param  \Illuminate\Http\Request  $request     * @param  \Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        /*** 前置操作 ***/        // [前置操作],中间件逻辑操作先于路由真实对应的操作,中间件逻辑位于$next($request)前        // 一些操作逻辑...        return $next($request);        /*** 后置操作 ***/        // [后置操作],中间件逻辑操作后于路由真实对应的操作,中间件逻辑位于$next($request)后        $response = $next($request);        // 一些操作逻辑...        return $response;    }}

注册

在\app\Http\Kernel.php中进行注册

<?phpnamespace App\Http;use App\Http\Middleware\Register;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,        'regester'=>Register::class,    ];}

使用

在路由中使用中间件,\app\Http\routes.php

Route::group(['middleware'=>'regester'],function(){    Route::any('regester',[        'as'=>'reg',        'uses'=>'IndexController@regester'    ]);});

前置操作与后置操作

  • [前置操作]:中间件逻辑操作先于路由真实对应的操作,中间件逻辑位于$next($request)前
  • [后置操作],中间件逻辑操作后于路由真实对应的操作,中间件逻辑位于$next($request)后
原创粉丝点击