目錄
全局中間件:適用於所有請求
中間件組:按需應用於常見路由集合
如何選擇全局還是中間件組?
首頁 php框架 Laravel 在Laravel應用全球或組中間件

在Laravel應用全球或組中間件

Jul 12, 2025 am 03:20 AM

在Laravel 中,可通過全局中間件和中間件組減少重複代碼。全局中間件適用於所有請求,如設置時區、加載語言包,註冊方式為在app/Http/Kernel.php 的$middleware 數組中添加類名,但應避免耗時操作;中間件組用於按需應用多個中間件到一組路由,如web 和api 組,可自定義組並應用於路由,例如將認證與權限判斷中間件組成admin 組,並通過Route::middleware('admin') 應用;選擇全局中間件用於系統級操作,中間件組用於業務劃分,從而提升項目結構清晰度與可維護性。

Applying Global or Group Middleware in Laravel

在Laravel 中,如果你希望某些中間件對所有路由或一組路由生效,而不是逐個給每個路由添加,可以使用全局中間件或中間件組。這種方式能減少重複代碼,提升可維護性。

Applying Global or Group Middleware in Laravel

全局中間件:適用於所有請求

全局中間件會在每一個請求中都被執行。常見的用途包括啟動時加載語言包、設置默認時區等。

Applying Global or Group Middleware in Laravel

要註冊一個全局中間件:

  1. 打開app/Http/Kernel.php
  2. $middleware數組中添加你的中間件類名

例如:

Applying Global or Group Middleware in Laravel
 protected $middleware = [
    \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Fruitcake\Cors\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\LoadLanguage::class, // 新增的全局中間件];

注意:全局中間件會影響所有請求,所以不要放太多耗時操作在裡面,比如數據庫查詢。除非你確實需要它作用於所有請求,否則建議用中間件組更靈活。

中間件組:按需應用於常見路由集合

中間件組適合那些你想一起應用到多個路由的中間件組合。最常見的例子是webapi組。

要創建或修改中間件組:

  1. 打開app/Http/Kernel.php
  2. 找到$middlewareGroups數組
  3. 添加或編輯某個組中的中間件列表

例如,如果你想為後台管理頁面統一加上權限驗證中間件:

 'admin' => [
    \App\Http\Middleware\Authenticate::class,
    \App\Http\Middleware\CheckAdminRole::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

然後,在定義路由的時候這樣使用:

 Route::middleware('admin')->prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::resource('users', UserController::class);
});

這樣做的好處是結構清晰,方便統一管理。同時也能避免把一堆中間件寫在每個路由上,減少出錯和維護成本。

如何選擇全局還是中間件組?

  • 用全局中間件:適用於系統級的操作,如基礎安全限制、日誌記錄、初始化配置等。
  • 用中間件組:適用於業務場景劃分,比如web 前台、API 接口、後台管理等。

舉個實際例子:

  • 你有一個商城項目,前台用戶訪問需要session 支持,後台管理員還需要額外的身份驗證。
  • 那麼你可以將\App\Http\Middleware\EncryptCookies::class\Illuminate\Session\Middleware\StartSession::class等放在web組裡。
  • 後台接口則使用自定義的admin組,包含認證權限判斷的中間件。

基本上就這些。合理利用全局和中間件組,可以讓你的Laravel 項目結構更清晰,也更容易擴展和維護。

以上是在Laravel應用全球或組中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

如何將消息記錄到Laravel中的文件? 如何將消息記錄到Laravel中的文件? Sep 21, 2025 am 06:04 AM

LaraveluseMonologTologMessagesViathelogFacade,withDefaultLogSstoreDinstorage/logs/logaver.log.configurechannelsinconfig/loggpocontrolOlOutput; theDefeftoconTrolOutput; theDefeftStackChannAnneLagateSmultipleHersMultipleHerslikeSlikeSlikesingLikeSingLikeSingle,whatwrile.afile.usel.uselel.uselel.usecy.useleleel.use)

如何在Laravel中驗證API 如何在Laravel中驗證API Sep 18, 2025 am 12:26 AM

installlaravelsanctumviaCompoSerandPublishItsFiles,thenRunMigrations.2.AddthehasapitokenStraittheUserModel.3.definelogin,logout of lokout of anduserroutesinapi.php

如何用害蟲在Laravel中編寫功能測試? 如何用害蟲在Laravel中編寫功能測試? Sep 16, 2025 am 06:12 AM

安裝PestviaCompoSerandIlializeItializItinlaravelToseTepting.2.CreateafeAteAteTureTestEstests/farmituretovalifateUser-facingInteractionsLikeHttpRequestSandDatabaseChangaseChangeseChangeseChangesingSusingPestpestpestpestpest的santtax。

如何使用Laravel的Hasmanythrough關係? 如何使用Laravel的Hasmanythrough關係? Sep 17, 2025 am 06:38 AM

AcountrycanaccessallpostSthrouserSerssinghasmanyThrough

如何在Laravel中創建全文搜索? 如何在Laravel中創建全文搜索? Sep 16, 2025 am 03:42 AM

toimplementfull-textsearchinlaravel,firstAddafull-textIndexinThththemigration $ table-> fullText(['title','content']); thenusewherewhereflyltext(['title'titter','content'','content',$ query)

如何使用Laravel Sanctum實施API身份驗證? 如何使用Laravel Sanctum實施API身份驗證? Sep 19, 2025 am 04:08 AM

toimplementApiAthenticationWithlaravelsanctum,YouneEdtoStepoken的authenticationthatallowsspas,mobileApps,andth-thired-thired-partyservicestoseStoseStoSecerlelyAccessyourapi.sanctumprovidesleightigeslightightightwerightightweightightweightightappablebybybybybybyissugyapitokensthatcanthatcan

如何使用Laravel中的路線資源控制器? 如何使用Laravel中的路線資源控制器? Sep 24, 2025 am 05:05 AM

Laravel資源控制器通過RESTful路由快速處理CRUD操作,使用Artisan命令生成控制器並註冊資源路由,單行代碼即可創建全部標準路由,支持限制動作、添加中間件及命名,結合路由模型綁定可自動解析參數,提升開發效率並保持代碼結構清晰。

如何在Laravel編寫RAW SQL查詢? 如何在Laravel編寫RAW SQL查詢? Sep 24, 2025 am 02:55 AM

使用DB門面執行原生SQL,根據查詢類型選擇DB::select、DB::insert、DB::update或DB::delete,並用參數綁定防止SQL注入;結構變更可用DB::unprepared;結合DB::raw可在查詢構造器中嵌入原生表達式。

See all articles