laravel中間件

在了解一些基礎(chǔ)的laravel知識(shí)后,可以試著去了解laravel一些功能強(qiáng)大并且特有的知識(shí)點(diǎn),比如中間件,那么官方給它的定義是:HTTP 中間件為過(guò)濾訪問(wèn)你的應(yīng)用的 HTTP 請(qǐng)求提供了一個(gè)方便的機(jī)制。例如,Laravel 默認(rèn)包含了一個(gè)驗(yàn)證用戶的中間件。如果沒(méi)有經(jīng)過(guò)身份驗(yàn)證,中間件將會(huì)將用戶重定向至登錄頁(yè)面。然而,如果用戶經(jīng)過(guò)了驗(yàn)證,中間件將會(huì)允許請(qǐng)求繼續(xù)在應(yīng)用中執(zhí)行下去。個(gè)人理解是,中間件就是放到方法前和方法后去執(zhí)行,然后影響執(zhí)行的效果.
那么laravel中的中間件事定義在哪里呢?
app\http\Middleware我們定義的中間件是在這個(gè)目錄下,那么中間件除了有影響方法的效果,還有什么樣的機(jī)制呢??

定義中間件

既然使用中間件,就必須去定義,那么怎么去定義呢?
之前了解過(guò)artisan工具,那么它是否可以幫助我們呢?
php artisan make:middleware EmailMiddleware
這樣的一條命令即可,執(zhí)行之后會(huì)在定義的目錄下多出一個(gè)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文件就是中間件的內(nèi)容,只有一個(gè)方法,handle里面的兩個(gè)參數(shù),一個(gè)是request對(duì)象,那么在laravel中是一個(gè)請(qǐng)求的意思,同樣的還有一個(gè)$next方法,直接return,個(gè)人理解就是用next方法去處理在路由中的請(qǐng)求信息
可能大家會(huì)有疑問(wèn),中間件就這么點(diǎn)東西么?不是的
現(xiàn)在只是定義了中間件,如何去使用呢?

注冊(cè)中間件

最簡(jiǎn)單的方法是在路由中或控制器中去使用

  • 注冊(cè)中間件到路由

//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;        
}

運(yùn)行test這個(gè)actionresponse的是

hello world

但是在路由中請(qǐng)求信息是hello,為什么給返回的是hello world呢,這就是中間件起到的作用,我們?cè)谡?qǐng)求信息之后,執(zhí)行了一個(gè) echo world的響應(yīng)信息,這是中間件的簡(jiǎn)單應(yīng)用
剛才呢,是把中間件注冊(cè)到基礎(chǔ)路由上,如果注冊(cè)到控制器路由呢,應(yīng)該怎么樣去使用

  • 注冊(cè)中間件到控制器路由
Route::get('index',['middleware'=>'App\Http\Middleware
\EmailMiddleware','uses'=>'IndexController']);

把中間注冊(cè)到控制器路由上,與基礎(chǔ)路由有一定的區(qū)別,

zjj.png

這些呢是一些非常簡(jiǎn)單的中間件使用,直接在路由中去注冊(cè)然后使用
去laravel做過(guò)項(xiàng)目的同學(xué)可能都知道,每當(dāng)去post的提交的時(shí)候,就會(huì)報(bào)一個(gè)Token的錯(cuò)誤,那這個(gè)錯(cuò)誤,為什么每次去post的提交都會(huì)報(bào)錯(cuò)呢,仔細(xì)去看,在app\http\middleware下有個(gè)VerifyCsrfToken.php這樣的中間件,然后laravel官方呢把這個(gè)中間件給注冊(cè)到全局上,就是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的驗(yàn)證
    ];
    //在路由中聲明的中間件
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    ];

每當(dāng)我們?nèi)ヌ峤坏臅r(shí)候就會(huì)報(bào)token的錯(cuò)誤

所以呢,我們也可以把中間件給注冊(cè)到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,//新聲明的中間件
    ];

在路由中調(diào)用這樣就可以了,如

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

這些呢就是中間件的使用,歡迎學(xué)習(xí)!!!

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 前言:laravel的中間件很方便,使用也很靈活,本文檔只是介紹簡(jiǎn)單使用 生成中間件(默認(rèn)在 /app/Http/...
    呦丶耍脾氣閱讀 3,609評(píng)論 0 0
  • 簡(jiǎn)介 Laravel 中間件提供了一種方便的機(jī)制來(lái)過(guò)濾進(jìn)入應(yīng)用的 HTTP 請(qǐng)求, 如ValidatePostSi...
    godruoyi閱讀 936評(píng)論 0 6
  • 這件事的需求是這樣:我們使用微信公眾平臺(tái)的開發(fā)模式搭建好了一個(gè)后臺(tái),這樣就不得不把運(yùn)營(yíng)人員設(shè)置的關(guān)鍵詞回復(fù)加進(jìn)來(lái)。...
    stois閱讀 4,111評(píng)論 1 2
  • 要是人能不對(duì)人他的喜怒哀樂(lè)如此敏感,就能更輕松的與人交往吧。 敏感的人,ta的細(xì)微改變都能被你察覺(jué),然后你就開始懷...
    夾不住頭發(fā)的耳朵閱讀 246評(píng)論 2 1
  • 關(guān)于考試總有吐不完的槽,又似乎有無(wú)數(shù)不得不存在的理由。作為與考試斗爭(zhēng)了n年的老同志,說(shuō)說(shuō)我的看法吧。簡(jiǎn)而言之:只有...
    時(shí)光滿袖閱讀 205評(píng)論 0 1

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