摘要:它包含三個主要的中間件組和應(yīng)用程序的全局中間件。這些中間件在應(yīng)用程序的每個請求期間運行。使得可以在組中注冊中間件,從而更容易通過使用組名將大量中間件附加到路由。典型示例是將每個用戶分配給角色,中間件檢查用戶的角色以確定是否有權(quán)訪問所請求的。
文章轉(zhuǎn)自:https://learnku.com/laravel/t...Laravel 中間件是什么?
簡而言之,中間件在 laravel 中的作用就是過濾 HTTP 請求,根據(jù)不同的請求來執(zhí)行不同的邏輯操作。
我們可以通過中間件實現(xiàn)以下功能:指定某些路由
設(shè)置 HTTP 響應(yīng)頭
記錄請求
過濾請求的參數(shù)
決定是否啟用站點維護模式
響應(yīng)前后做一些必要的操作
自定義中間件命令行執(zhí)行下面的簡單命令,就可以輕松創(chuàng)建一個新的中間件
php artisan make:middleware//MiddlewareName 就是你要創(chuàng)建的中間件的名字
執(zhí)行上面的命令,Laravel 會在 app/Http/Middleware 目錄下自動創(chuàng)建一個只包含 handle 方法的中間件。
在中間件被調(diào)用的時候,handle 方法就會執(zhí)行。這里需要注意的是 handle 方法默認有兩個參數(shù) ?$request?和?$next?。?$request 用來接受應(yīng)用的請求組求,?$next 將請求傳遞給應(yīng)用程序。這兩個參數(shù)是 handle 必不可少的!中間件也包括前置中間件和后置中間件。
“前置中間件” 顧名思義在將請求轉(zhuǎn)發(fā)到應(yīng)用程序之前處理一些邏輯。 另一方面,在中間件之后,在應(yīng)用程序處理了請求并生成響應(yīng)之后運行。
前置中間件:
后置中間件:
中間件的類別全局中間件
路由中間件
全局中間件針對命中應(yīng)用程序的每個請求運行。 Laravel 自帶了大多數(shù)這些中間件例如?ValidatePostSize,?TrimStrings,CheckForMaintenanceMode?等等.
路由中間件僅在它們所連接的路由上運行
注冊中間件
例如 ?redirectIfAuthenticated.創(chuàng)建的任何中間件都必須注冊,因為這是 Laravel 知道存在的唯一方式。 要注冊中間件,只需打開名為 kernel.php 的文件,該文件位于 Http 文件夾中,如下所示:
This file contains list of all registered middlewares that come with Laravel by default. it contains three major arrays which
此文件包含默認 Laravel 提供的所有已注冊中間件的列表。 它包含三個主要的中間件組?$middleware?,?$middlewareGroups?和?$routeMiddleware[ AppHttpMiddlewareEncryptCookies::class, IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class, IlluminateSessionMiddlewareStartSession::class, // IlluminateSessionMiddlewareAuthenticateSession::class, IlluminateViewMiddlewareShareErrorsFromSession::class, AppHttpMiddlewareVerifyCsrfToken::class, IlluminateRoutingMiddlewareSubstituteBindings::class, ], "api" => [ "throttle:60,1", "bindings", ], ]; /** * 應(yīng)用程序的路由中間件. * * 可以將這些中間件分配給組或多帶帶使用。 * * @var array */ protected $routeMiddleware = [ "auth" => IlluminateAuthMiddlewareAuthenticate::class, "auth.basic" => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, "bindings" => IlluminateRoutingMiddlewareSubstituteBindings::class, "can" => IlluminateAuthMiddlewareAuthorize::class, "guest" => AppHttpMiddlewareRedirectIfAuthenticated::class, "throttle" => IlluminateRoutingMiddlewareThrottleRequests::class, //the just created middlware "superadmin" => AppHttpMiddlewareRedirectIfSuperAdmin::class, ]; }?$middleware?數(shù)組包含全局中間件,它運行應(yīng)用程序的每個HTTP請求,所以如果你想為每個請求運行一個中間件,你應(yīng)該在這里注冊它。 ?$middlewareGroups 使得可以在組中注冊中間件,從而更容易通過使用組名將大量中間件附加到路由。 $routeMiddleware 數(shù)組包含各個注冊的路由中間件。
分配中間件有兩個主要方法可以把注冊好的中間件應(yīng)用到路由中。
通過控制器的構(gòu)造方法
通過路由
通過構(gòu)造方法分配中間件
通過構(gòu)造方法分配中間有很大的靈活性,它提供了兩個重要的方法except($parameters)?和?only($parameters),這兩個方法可以允許或阻止中間件應(yīng)用到控制器中的輔助方法。不使用這兩個方法,中間件將使用與控制器的每個方法。
middleware("auth"); } public function viewForum(){ return view("index"); } public function edit($id){ } public function delete($id){ } }使用?except?和?only?方法我們可以選擇把中間件應(yīng)用到指定方法。
middleware("auth")->except(["viewForums", "viewForumDetails"]); } public function viewForums(){ return view("index"); } public function edit($id){ } public function delete($id){ } public function viewForumDetails(){ } }通過路由分配中間件如果注冊的中間件可以直接附加到路由,如下所示:
middleware("auth"); /**方法 2 或者像這樣使用完全限定的類名: */ use AppHttpMiddlewareCheckAge; Route::get("admin/profile", function () { // action })->middleware(CheckAge::class); //方法 3 Route::group(["middleware" => ["web"]], function () { //action });N:B 中間件組可以像單個中間件一樣分配給路由
中間件參數(shù)其他參數(shù)可以傳遞給中間件。 典型示例是將每個用戶ID分配給角色,中間件檢查用戶的角色以確定是否有權(quán)訪問所請求的 URI。 參數(shù)可以傳遞給中間件,如下所示:
middleware("auth:"); // 這里應(yīng)該被用戶想要傳遞的任何參數(shù)替換。 //方法2 (Through a controller) use IlluminateHttpRequest; class ForumController extends Controller { public function __construct(){ $this->middleware("auth: "); } } 通過用逗號分隔每個參數(shù),可以將多個參數(shù)傳遞給中間件。
middleware("auth:, , "); // , , 這里應(yīng)該被用戶想要傳遞的任何參數(shù)替換。 這些參數(shù)在 $next 變量之后傳遞給中間件的 handle 函數(shù)
總結(jié)要創(chuàng)建中間件,請執(zhí)行以下過程
使用 artisan 命令創(chuàng)建中間件?php artisan make:middleware 中間件名.
在app→Http文件夾中的 kernel.php 中注冊中間件
在創(chuàng)建的中間件中編寫邏輯
將中間件分配給路由或控制器
ConclusionLaravel中間件可以更輕松地保護我們的路由,過濾輸入并完成許多其他工作,而無需編寫如此多的邏輯。 查看官方 Laravel 文檔?這里?了解中間件的更多功能,最重要的是練習(xí)。
文章轉(zhuǎn)自:https://learnku.com/laravel/t...
更多文章:https://learnku.com/laravel/c...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/31252.html
摘要:但是服務(wù)通常由服務(wù)提供者來管理的。小結(jié)通過上述的例子,基本上可以理解服務(wù)容器和服務(wù)提供者的使用。懂得了服務(wù)容器和服務(wù)提供者,理解門面也就不難了。 自動依賴注入 什么是依賴注入,用大白話將通過類型提示的方式向函數(shù)傳遞參數(shù)。 實例 1 首先,定義一個類: /routes/web.php class Bar {} 假如我們在其他地方要使用到 Bar 提供的功能(服務(wù)),怎么辦,直接傳入?yún)?shù)即...
摘要:前言年底了不太忙,最近一段時間也一直在研究,就想寫篇關(guān)于比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。優(yōu)點的就是為藝術(shù)家創(chuàng)造的框架,它也是工程化的趨勢。項目維護方便也是事實。如果有遇到問題可以直接在教程下面留言。 前言 年底了不太忙,最近一段時間也一直在研究laravel,就想寫篇關(guān)于laravel比較深一點的教程系列啥的,于是就找到站長給開了寫教程的渠道。由于第一次寫,...
摘要:一路由目錄眾所周知,對于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無狀態(tài)的,并且被分配了中間件組。生成的控制器為每個行為保留了方法,同時還包括了處理動作和的聲明注釋。 一、路由目錄 眾所周知,對于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對于laravel框架也一樣,對于數(shù)據(jù)庫的操作,無非...
摘要:大家有好的文章可以在評論下面分享出來共同進步本文鏈接數(shù)組使用之道程序員進階學(xué)習(xí)書籍參考指南教你在不使用框架的情況下也能寫出現(xiàn)代化代碼巧用數(shù)組函數(shù)框架中間件實現(xiàn)沒錯,這就是面向?qū)ο缶幊淘O(shè)計模式需要遵循的個基本原則令人困惑的在中使用協(xié)程實現(xiàn)多任 大家有好的文章,可以在評論下面分享出來, 共同進步! 本文github鏈接 php PHP 數(shù)組使用之道 PHP程序員進階學(xué)習(xí)書籍參考指南 教你...
摘要:官方地址是目前最流行的框架,發(fā)展勢頭迅猛,應(yīng)用非常廣泛,有豐富的擴展包可以應(yīng)付你能想到的各種應(yīng)用場景,框架思想前衛(wèi),跟隨時代潮流,提倡優(yōu)雅代碼,自稱為工匠,其中的模板引擎容器以及擴展包為業(yè)務(wù)的開發(fā)提供了極大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,發(fā)展勢頭迅猛,應(yīng)用非常廣泛,有豐富的擴展包可以應(yīng)付你能想到的各種應(yīng)用場景,lara...
閱讀 1040·2021-09-13 10:29
閱讀 3391·2019-08-29 18:31
閱讀 2633·2019-08-29 11:15
閱讀 3012·2019-08-26 13:25
閱讀 1369·2019-08-26 12:00
閱讀 2293·2019-08-26 11:41
閱讀 3377·2019-08-26 10:31
閱讀 1488·2019-08-26 10:25