Laravel 中間件

創(chuàng)建中間件

php artisan make:middleware PrintHelloworld

自動(dòng)生成了 middleware 文件:app\Http\Middleware\PrintHelloworld.php

修改中間件文件

app\Http\Middleware\PrintHelloworld.php

<?php

namespace App\Http\Middleware;

use Closure;

class PrintHelloworld
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        dump('Hello World!');
        return $next($request);
    }
}

注冊(cè)中間件

修改 app\Http\kernel.php 文件;有全局注冊(cè)、grand注冊(cè)、路由注冊(cè)三種方式;

全局注冊(cè):作用于所有路由

.
.
.
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \Fruitcake\Cors\HandleCors::class,
        \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\PrintHelloworld::class,
    ];
.
.
.

訪問(wèn)主頁(yè), dump 語(yǔ)句會(huì)輸首先輸出。

路由注冊(cè):作用于注冊(cè)的路由

修改 app\Http\kernel.php 中的 protected $routeMiddleware部分;

.
.
.
protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

        'printinfo' =>  \App\Http\Middleware\PrintHelloworld::class,
    ];
.
.
.

指定單個(gè)路由

修改 routes\web.php 文件

<?php

use Illuminate\Support\Facades\Route;



Route::get('/', function () {
    return view('welcome');
})->middleware('printinfo');

這樣,這個(gè)中間件只會(huì)在訪問(wèn)指定路由時(shí)起作用;

指定一組路由

修改 routes\web.php 文件

<?php

use Illuminate\Support\Facades\Route;

Route::resource('test', 'TestController')->middleware('printinfo');


也可以在控制器中的 construct 函數(shù)中調(diào)用

public function __construct()
{
    //這種方式會(huì)對(duì)該控制器里的所有方法都產(chǎn)生作用
    //$this->middleware('printinfo);  
          
    //這種方式指定對(duì)控制器里的某個(gè)方法產(chǎn)生作用
    $this->middleware('checklog', [
        'only' => ['edit', 'update']
    ]);
    
    //這種方式排除控制器里的某個(gè)方法
    $this->middleware('checklog', [
        'except' => ['edit', 'update']
    ]);
    
}

作用于 grand

修改 app\Http\kernel.php 中的 protected $middlewareGroups部分;

.
.
.

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\PrintHelloworld::class,
        ],

        'api' => [
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
    
.
.
.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.定義中間件 要?jiǎng)?chuàng)建一個(gè)新的中間件,可以通過(guò) Artisan 命令 make:middleware: 請(qǐng)求之前/...
    charmingcheng閱讀 567評(píng)論 0 0
  • 什么是中間件 可以簡(jiǎn)單地將中間件理解為請(qǐng)求與響應(yīng)之間的中間人。用戶發(fā)出一個(gè)路由請(qǐng)求,經(jīng)過(guò)中間件的驗(yàn)證或過(guò)濾后,才能...
    閑睡貓閱讀 6,019評(píng)論 0 2
  • 文章轉(zhuǎn)自:https://learnku.com/laravel/t/27426 Laravel 中間件是什么? ...
    summerbluet閱讀 754評(píng)論 0 2
  • 前言:laravel的中間件很方便,使用也很靈活,本文檔只是介紹簡(jiǎn)單使用 生成中間件(默認(rèn)在 /app/Http/...
    呦丶耍脾氣閱讀 3,609評(píng)論 0 0
  • 在了解一些基礎(chǔ)的laravel知識(shí)后,可以試著去了解laravel一些功能強(qiáng)大并且特有的知識(shí)點(diǎn),比如中間件,那么官...
    布爾教育閱讀 802評(píng)論 0 2

友情鏈接更多精彩內(nèi)容