国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
Laravel 中的中間件是什麼?
如何建立自訂中間件
我們的自定義中間件正在運行
結(jié)論
首頁 後端開發(fā) php教程 掌握 Laravel 中間件的基礎(chǔ)知識

掌握 Laravel 中間件的基礎(chǔ)知識

Aug 31, 2023 am 10:49 AM

掌握 Laravel 中間件的基礎(chǔ)知識

在本文中,我們將深入探討 Laravel 框架,以了解中介軟體的概念。本文的前半部首先介紹中間件及其實際用途。

#隨著我們繼續(xù),我們將介紹如何在 Laravel 應(yīng)用程式中建立自訂中間件。建立自訂中間件後,我們將探索可用於將其註冊到 Laravel 的選項,以便可以在請求處理流程中實際呼叫它。

我希望您認為自己熟悉基本的 Laravel 概念和用於生成腳手架程式碼的 Artisan 命令列工具。當(dāng)然,最新 Laravel 應(yīng)用程式的有效安裝可讓您立即運行本文中提供的範(fàn)例。

Laravel 中的中間件是什麼?

我們可以將中間件視為一種機制,讓您可以連接到 Laravel 應(yīng)用程式的典型請求處理流程。典型的 Laravel 路由處理會經(jīng)歷請求處理的某些階段,而中間件是應(yīng)用程式必須經(jīng)過的層之一。

那麼掛鉤 Laravel 請求處理流程到底有什麼意義呢?想一想需要在應(yīng)用程式引導(dǎo)的早期階段執(zhí)行的事情。例如,需要在早期對使用者進行身份驗證,以決定是否允許他們存取目前路由。

我能想到的一些可以透過中間件實現(xiàn)的事情是:

  • 記錄請求
  • 重定向使用者
  • 更改/清理傳入?yún)?shù)
  • 操縱 Laravel 應(yīng)用程式產(chǎn)生的回應(yīng)
  • 還有更多

事實上,預(yù)設(shè)的 Laravel 應(yīng)用程式已經(jīng)附帶了一些重要的中間件。例如,有中間件可以檢查網(wǎng)站是否處於維護模式。另一方面,有中間件來清理輸入請求參數(shù)。正如我前面提到的,使用者認證也是透過中間件本身來實現(xiàn)的。

我希望到目前為止的解釋可以幫助您對中間件這個術(shù)語更有信心。如果您仍然感到困惑,請不要擔(dān)心,因為我們將從下一節(jié)開始建立自訂中間件,這將幫助您準確地理解如何在現(xiàn)實世界中使用中間件。

如何建立自訂中間件

在本節(jié)中,我們將建立自訂中間件。但我們的自訂中間件到底要完成什麼任務(wù)呢?

最近,我遇到了客戶的自訂要求,如果使用者從任何行動裝置造訪網(wǎng)站,他們應(yīng)該被重定向到相應(yīng)的子網(wǎng)域 URL,並且所有查詢字串參數(shù)保持不變。我相信這是演示如何在這個特定場景中使用 Laravel 中間件的完美用例。

在這種情況下我們想要使用中間件的原因是需要掛鉤應(yīng)用程式的請求流。在我們的自訂中間件中,我們將檢查用戶代理,如果用戶使用行動設(shè)備,則他們將被重定向到相應(yīng)的行動 URL。

討論完所有理論後,讓我們開始實際開發(fā),這是理解新概念的最佳方式,不是嗎?

身為 Laravel 開發(fā)人員,如果您希望建立任何自訂功能,您最終將在大部分時間使用 Artisan 工具來建立基本範(fàn)本程式碼。讓我們用它為我們的自訂中間件建立基本模板程式碼。

轉(zhuǎn)到命令列並轉(zhuǎn)到專案的文檔根目錄。執(zhí)行以下命令建立自訂中間件範(fàn)本 MobileRedirect。

php artisan make:middleware MobileRedirect

這應(yīng)該使用以下程式碼建立一個檔案 app/Http/Middleware/MobileRedirect.php 。

<?php
 
namespace App\Http\Middleware;
 
use Closure;
 
class MobileRedirect
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

您通常會注意到 handle 方法的實現(xiàn),該方法充當(dāng)中間件的主幹,並且您要實現(xiàn)的中間件的主要邏輯應(yīng)該位於此處.

藉此機會介紹Laravel自備的中間件類型。主要有前中介軟體和後中介軟體兩種。

顧名思義,before 中間件是在實際處理請求和建置回應(yīng)之前運行的中間件。另一方面,後中間件在應(yīng)用程式處理請求之後運行,並且此時已經(jīng)建構(gòu)了回應(yīng)。

在我們的例子中,我們需要在處理請求之前重定向用戶,因此它將被開發(fā)為前置中間件。

繼續(xù)並使用以下內(nèi)容修改檔案 app/Http/Middleware/MobileRedirect.php 。

<?php
 
namespace App\Http\Middleware;
 
use Closure;
 
class MobileRedirect
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // check if the request is from mobile device
        if ($request->mobile == "1") {
            return redirect('mobile-site-url-goes-here');
        }
 
        return $next($request);
    }
}

為了簡單起見,我們只檢查mobile 查詢字串參數(shù)是否存在,如果將其設(shè)定為TRUE,則使用者將被重定向到對應(yīng)的行動裝置網(wǎng)站網(wǎng)址。當(dāng)然,如果您希望即時檢測,您會希望使用用戶代理檢測庫。

此外,您還希望將 mobile-site-url-goes-here 路由替換為正確的路由或 URL,因為它只是用於演示目的的佔位符。

按照我們的自定義邏輯,調(diào)用 $next($request) 允許在應(yīng)用程序鏈中進一步處理請求。在我們的例子中需要注意的重要一點是,我們將移動檢測邏輯放置在 $next($request) 調(diào)用之前,有效地使其成為一個 before 中間件。

這樣,我們的自定義中間件就幾乎準備好進行測試了。目前,Laravel 無法了解我們的中間件。為此,您需要向 Laravel 應(yīng)用程序注冊您的中間件,這正是我們下一節(jié)的主題。

在進入下一部分之前,我想演示一下后中間件的外觀,以防萬一有人對此感到好奇。

<?php
 
namespace App\Http\Middleware;
 
use Closure;
 
class CustomMiddleWare
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        
        /* your custom logic goes here */
        
        return $response;
    }
}

正如您已經(jīng)注意到的,中間件的自定義邏輯在 Laravel 應(yīng)用程序處理請求后執(zhí)行。此時,您還可以訪問 $response 對象,如果您愿意,它允許您操作它的某些方面。

這就是 after 中間件的故事。

我們的自定義中間件正在運行

本節(jié)描述了向 Laravel 應(yīng)用程序注冊中間件的過程,以便在請求處理流程中實際調(diào)用它。

繼續(xù)打開文件 app/Http/Kernel.php 并查找以下代碼片段。

/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

如您所見,$middleware 保存了 Laravel 默認安裝附帶的中間件數(shù)組。此處列出的中間件將根據(jù)每個 Laravel 請求執(zhí)行,因此它是放置我們自己的自定義中間件的理想選擇。

繼續(xù)添加我們的自定義中間件,如以下代碼片段所示。

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

現(xiàn)在,嘗試使用查詢字符串 mobile=1 訪問任何 Laravel 路由,這應(yīng)該會觸發(fā)我們的中間件代碼!

這就是您應(yīng)該注冊需要在每個請求上運行的中間件的方式。但是,有時您希望僅針對特定路由運行中間件。讓我們檢查一下如何使用 $routeMiddleware 來實現(xiàn)這一點。

在我們當(dāng)前示例的上下文中,我們假設(shè)如果用戶訪問您網(wǎng)站上的任何特定路由,他們將被重定向到移動網(wǎng)站。在這種情況下,您不想將中間件包含在 $middleware 列表中。

相反,您希望將中間件直接附加到路由定義,如下所示。

Route::get('/hello-world', 'HelloWorldController@index')->middleware(\App\Http\Middleware\MobileRedirect::class);

事實上,我們可以更進一步,為我們的中間件創(chuàng)建一個別名,這樣您就不必使用內(nèi)聯(lián)類名。

打開文件 app/Http/Kernel.php 并查找 $routeMiddleware ,它保存了別名到中間件的映射。讓我們將我們的條目包含到該列表中,如以下代碼片段所示。

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'mobile.redirect' => \App\Http\Middleware\MobileRedirect::class
];

修改后的路由定義如下所示。

Route::get('/hello-world', 'HelloWorldController@index')->middleware('mobile.redirect');

這就是向 Laravel 應(yīng)用程序注冊中間件的故事。這非常簡單,不是嗎?

事實上,我們已經(jīng)讀到了本文的結(jié)尾,我希望您能充分享受它。

結(jié)論

探索任何框架中的架構(gòu)概念總是令人興奮的事情,這就是我們在本文中探索 Laravel 框架中的中間件時所做的事情。

從中間件的基本介紹開始,我們將注意力轉(zhuǎn)移到在 Laravel 應(yīng)用程序中創(chuàng)建自定義中間件的主題。文章的后半部分討論了如何向 Laravel 注冊自定義中間件,這也是探索附加中間件的不同方式的機會。

希望這次旅程富有成效,并且本文能夠幫助您豐富您的知識。另外,如果您希望我在即將發(fā)表的文章中提出特定主題,您可以隨時給我留言。

今天就這樣,如果有任何疑問,請隨時使用下面的提要來提出您的疑問!

以上是掌握 Laravel 中間件的基礎(chǔ)知識的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量範(fàn)圍解釋了 PHP變量範(fàn)圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次並在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助於避免錯誤並提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗證來源與類型、控製文件名與路徑、設(shè)置服務(wù)器限制並二次處理媒體文件。 1.驗證上傳來源通過token防止CSRF並通過finfo_file檢測真實MIME類型使用白名單控制;2.重命名文件為隨機字符串並根據(jù)檢測類型決定擴展名存儲至非Web目錄;3.PHP配置限制上傳大小及臨時目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

發(fā)電機如何在PHP中工作? 發(fā)電機如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關(guān)鍵在於明確目的與規(guī)範(fàn),註釋應(yīng)解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統(tǒng)一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調(diào)邏輯背後的原因,如說明為何需手動輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續(xù)追蹤與協(xié)作。好的註釋能降低溝通成本,提升代碼維護效率。

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出範(fàn)圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長度,動態(tài)字符串需驗證有效性,多語言項目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles