欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel中間件的使用詳解

 更新時(shí)間:2023年02月08日 15:27:21   作者:huaweichenai  
Laravel?中間件提供了一種方便的機(jī)制來(lái)過(guò)濾進(jìn)入應(yīng)用的?HTTP?請(qǐng)求。這篇文章主要和大家介紹一下Laravel中間件的創(chuàng)建和使用,需要的可以參考一下

Laravel 中間件提供了一種方便的機(jī)制來(lái)過(guò)濾進(jìn)入應(yīng)用的 HTTP 請(qǐng)求。例如,Laravel 內(nèi)置了一個(gè)中間件來(lái)驗(yàn)證用戶的身份認(rèn)證。如果用戶沒(méi)有通過(guò)身份認(rèn)證,中間件會(huì)將用戶重定向到登錄界面。但是,如果用戶被認(rèn)證,中間件將允許該請(qǐng)求進(jìn)一步進(jìn)入該應(yīng)用,所有中間件都位于 app/Http/Middleware 目錄下

一:創(chuàng)建中間件

使用 make:middleware 命令來(lái)創(chuàng)建新的中間件

php artisan make:middleware CheckAge  #CheckAge表示的是中間件文件名稱

該命令將會(huì)在 app/Http/Middleware 目錄內(nèi)新建一個(gè) CheckAge 類

在這個(gè)中間件里,我們僅允許提供的參數(shù) id 大于 200 的請(qǐng)求訪問(wèn)該路由。否則,我們會(huì)將用戶重定向到 home

<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
    /**
     * 處理傳入的請(qǐng)求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->id<= 200) {
            return redirect('home');
        }
        return $next($request);
    }
}

二:前置和后置中間件

中間件是在請(qǐng)求之前或之后運(yùn)行取決于中間件本身

1:前置中間件

<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // 執(zhí)行動(dòng)作
        return $next($request);
    }
}

2:后置中間件

<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // 執(zhí)行動(dòng)作
        return $response;
    }
}

三:注冊(cè)中間件

1:注冊(cè)全局中間件

如果你想讓中間件在你應(yīng)用的每個(gè) HTTP 請(qǐng)求期間運(yùn)行,只需在 app/Http/Kernel.php 類中的 $middleware 屬性里列出這個(gè)中間件類

protected $middleware = [
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

2:為路由分配中間件

如果想為指定的路由配置中間件,首先應(yīng)該在 app/Http/Kernel.php 文件內(nèi)為該中間件指定一個(gè)鍵。默認(rèn)情況下,Kernel 類的 $routeMiddleware 屬性包含 Laravel 內(nèi)置的中間件條目。要加入自定義的,只需把它附加到列表后并為其分配一個(gè)自定義鍵即可

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,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];

一旦在 Kernel 中定義了中間件,就可使用 middleware 方法將中間件分配給路由

Route::get('admin/profile', function () {
    //
})->middleware('auth');

你還可以為路由分配多個(gè)中間件

Route::get('/', function () {
    //
})->middleware('first', 'second');

分配中間件時(shí),你還可以傳遞完整的類名

use App\Http\Middleware\CheckAge;
 
Route::get('admin/profile', function () {
    //
})->middleware(CheckAge::class);

3:中間件組

有時(shí)你可能想用單一的鍵為幾個(gè)中間件分組,使其更容易分配到路由。可以使用 Kernel 類的 $middlewareGroups 屬性來(lái)實(shí)現(xiàn)

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,
    ],
 
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

可以使用與單個(gè)中間件相同的語(yǔ)法將中間件組分配給路由和控制器操作

Route::get('/', function () {
    //
})->middleware('web');
Route::group(['middleware' => ['web']], function () {
    //
});

4:排序中間件

很少情況下,你可能需要中間件以特定的順序執(zhí)行,但是當(dāng)它們被分配到路由時(shí),你無(wú)法控制它們的順序。在這種情況下,可以使用 app/Http/Kernel.php 文件的 $middlewarePriority 屬性指定中間件優(yōu)先級(jí)

 protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\Authenticate::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];

5:中間件參數(shù)

中間件也可以接受額外的參數(shù)。例如,如果應(yīng)用需要在運(yùn)行特定操作前驗(yàn)證經(jīng)過(guò)身份認(rèn)證的用戶是否具備給定的「角色」,你可以新建一個(gè) CheckRole 中間件,由它來(lái)接收「角色」名稱作為附加參數(shù)。

附加的中間件參數(shù)應(yīng)該在 $next 參數(shù)之后被傳遞:

<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
    /**
     * 處理傳入的請(qǐng)求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // 重定向...
        }
        return $next($request);
    }
}

定義路由時(shí)通過(guò)一個(gè) : 來(lái)隔開(kāi)中間件名稱和參數(shù)來(lái)指定中間件參數(shù)。多個(gè)參數(shù)就使用逗號(hào)分隔

Route::put('post/{id}', function ($id) {
    //
})->middleware('role:editor');

6:Terminable 中間件

laravel 內(nèi)置的「session」中間件會(huì)在響應(yīng)發(fā)送到瀏覽器之后將會(huì)話數(shù)據(jù)寫(xiě)入存儲(chǔ)器中。如果你在中間件中定義一個(gè) terminate 方法,則會(huì)在響應(yīng)發(fā)送到瀏覽器后自動(dòng)調(diào)用

<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
    public function terminate($request, $response)
    {
        // Store the session data...
    }
}

terminate 方法應(yīng)該同時(shí)接收和響應(yīng)。一旦定義了這個(gè)中間件,你應(yīng)該將它添加到路由列表或 app/Http/Kernel.php 文件的全局中間件中

在你的中間件上調(diào)用 terminate 調(diào)用時(shí),Laravel 會(huì)從 服務(wù)容器 中解析出一個(gè)新的中間件實(shí)例。如果要在調(diào)用 handle 和 terminate 方法時(shí)使用同一個(gè)中間件實(shí)例,就使用容器的 singleton 方法向容器注冊(cè)中間件

到此這篇關(guān)于Laravel中間件的使用詳解的文章就介紹到這了,更多相關(guān)Laravel中間件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP5常用函數(shù)列表(分享)

    PHP5常用函數(shù)列表(分享)

    本篇文章是對(duì)PHP5常用函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法示例

    PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法示例

    這篇文章主要介紹了PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了PHP排序二叉樹(shù)的定義、遍歷、節(jié)點(diǎn)插入、查找等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • php 上傳功能實(shí)例代碼

    php 上傳功能實(shí)例代碼

    php 上傳功能實(shí)例代碼,需要的朋友可以參考下。
    2010-04-04
  • php at(@)符號(hào)的用法簡(jiǎn)介

    php at(@)符號(hào)的用法簡(jiǎn)介

    對(duì)于php的初學(xué)者,經(jīng)常會(huì)看到在一個(gè)函數(shù)名字前面有一個(gè)at(@)符號(hào),但是不知道它的作用和用法,去掉后好像對(duì)程序沒(méi)有什么影響,感到很困惑,簡(jiǎn)單的說(shuō)@可以忽略錯(cuò)誤,有仰制錯(cuò)誤的功能為錯(cuò)誤控制操作符.
    2009-07-07
  • PHP微信支付功能示例

    PHP微信支付功能示例

    這篇文章主要介紹了PHP微信支付功能,結(jié)合實(shí)例形式分析了php微信支付功能相關(guān)sdk與使用技巧,需要的朋友可以參考下
    2019-03-03
  • 使用php數(shù)據(jù)緩存技術(shù)提高執(zhí)行效率

    使用php數(shù)據(jù)緩存技術(shù)提高執(zhí)行效率

    使用php緩存技術(shù)時(shí)為了提高效率。在大量的并發(fā)訪問(wèn)面前,獲取數(shù)據(jù)可能成為效率的瓶頸,PHP實(shí)際開(kāi)發(fā)之中針對(duì)數(shù)據(jù)處理進(jìn)行緩存。
    2022-12-12
  • 一些 PHP 管理系統(tǒng)程序中的后門

    一些 PHP 管理系統(tǒng)程序中的后門

    一些php網(wǎng)站管理程序的,一些后門,其實(shí)官方也沒(méi)有惡意,主要是大家為了自己的安全。
    2009-08-08
  • php 根據(jù)url自動(dòng)生成縮略圖并處理高并發(fā)問(wèn)題

    php 根據(jù)url自動(dòng)生成縮略圖并處理高并發(fā)問(wèn)題

    服務(wù)器生成縮略圖的時(shí)機(jī)一般分為兩種:上傳文件時(shí)生成、訪問(wèn)時(shí)生成,下面為大家介紹下php根據(jù)url自動(dòng)生成縮略圖并處理高并發(fā)問(wèn)題
    2014-01-01
  • php中magic_quotes_gpc對(duì)unserialize的影響分析

    php中magic_quotes_gpc對(duì)unserialize的影響分析

    這篇文章主要介紹了php中magic_quotes_gpc對(duì)unserialize的影響,以實(shí)例的形式分析了magic_quotes_gpc安全過(guò)濾對(duì)unserialize造成的影響以及對(duì)此的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • PHP HTML代碼串 截取實(shí)現(xiàn)代碼

    PHP HTML代碼串 截取實(shí)現(xiàn)代碼

    將一段文字截取一定的物理長(zhǎng)度顯示,注意,要截取的不是字符串的字節(jié)數(shù),UFT-8 的編碼中文字符是3個(gè)字節(jié)或者4個(gè)字節(jié)的,而顯示的時(shí)候中文會(huì)占兩個(gè)字符的長(zhǎng)度,英文字符只占一個(gè),全角的時(shí)候又有不同。
    2009-06-06

最新評(píng)論