电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Laravel中間件的使用詳解

瀏覽:242日期:2022-06-06 17:28:46
目錄
  • 一:創(chuàng)建中間件
  • 二:前置和后置中間件
    • 1:前置中間件
    • 2:后置中間件
  • 三:注冊中間件
    • 1:注冊全局中間件
    • 2:為路由分配中間件
    • 3:中間件組
    • 4:排序中間件
    • 5:中間件參數(shù)
    • 6:Terminable 中間件

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

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

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

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

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

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

<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
    /**
     * 處理傳入的請求
     *
     * @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);
    }
}

二:前置和后置中間件

中間件是在請求之前或之后運行取決于中間件本身

1:前置中間件

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

2:后置中間件

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

三:注冊中間件

1:注冊全局中間件

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

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)為該中間件指定一個鍵。默認(rèn)情況下,Kernel 類的 $routeMiddleware 屬性包含 Laravel 內(nèi)置的中間件條目。要加入自定義的,只需把它附加到列表后并為其分配一個自定義鍵即可

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");

你還可以為路由分配多個中間件

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

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

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

3:中間件組

有時你可能想用單一的鍵為幾個中間件分組,使其更容易分配到路由??梢允褂?Kernel 類的 $middlewareGroups 屬性來實現(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",
    ],
];

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

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

4:排序中間件

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

 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)用需要在運行特定操作前驗證經(jīng)過身份認(rèn)證的用戶是否具備給定的「角色」,你可以新建一個 CheckRole 中間件,由它來接收「角色」名稱作為附加參數(shù)。

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

<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
    /**
     * 處理傳入的請求
     *
     * @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ù)來指定中間件參數(shù)。多個參數(shù)就使用逗號分隔

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

6:Terminable 中間件

laravel 內(nèi)置的「session」中間件會在響應(yīng)發(fā)送到瀏覽器之后將會話數(shù)據(jù)寫入存儲器中。如果你在中間件中定義一個 terminate 方法,則會在響應(yīng)發(fā)送到瀏覽器后自動調(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)該同時接收和響應(yīng)。一旦定義了這個中間件,你應(yīng)該將它添加到路由列表或 app/Http/Kernel.php 文件的全局中間件中

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

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

標(biāo)簽: PHP
主站蜘蛛池模板: 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 广西正涛环保工程有限公司【官网】 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 聚丙烯酰胺_阴离子_阳离子「用量少」巩义亿腾厂家直销,售后无忧 聚合甘油__盐城市飞龙油脂有限公司 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 路面机械厂家| 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 电动葫芦-河北悍象起重机械有限公司| 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 信阳市建筑勘察设计研究院有限公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 贵州成人高考网_贵州成考网 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 |