日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Laravel中間件的使用詳解

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

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

一:創建中間件

使用 make:middleware 命令來創建新的中間件

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

該命令將會在 app/Http/Middleware 目錄內新建一個 CheckAge 類

在這個中間件里,我們僅允許提供的參數 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)
    {
// 執行動作
return $next($request);
    }
}

2:后置中間件

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

三:注冊中間件

1:注冊全局中間件

如果你想讓中間件在你應用的每個 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:為路由分配中間件

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

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 屬性來實現

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:排序中間件

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

 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:中間件參數

中間件也可以接受額外的參數。例如,如果應用需要在運行特定操作前驗證經過身份認證的用戶是否具備給定的「角色」,你可以新建一個 CheckRole 中間件,由它來接收「角色」名稱作為附加參數。

附加的中間件參數應該在 $next 參數之后被傳遞:

<?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);
    }
}

定義路由時通過一個 : 來隔開中間件名稱和參數來指定中間件參數。多個參數就使用逗號分隔

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

6:Terminable 中間件

laravel 內置的「session」中間件會在響應發送到瀏覽器之后將會話數據寫入存儲器中。如果你在中間件中定義一個 terminate 方法,則會在響應發送到瀏覽器后自動調用

<?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 方法應該同時接收和響應。一旦定義了這個中間件,你應該將它添加到路由列表或 app/Http/Kernel.php 文件的全局中間件中

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

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

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧洲在线| 精品视频99| 久久久久欧美精品| 日韩在线二区| 五月天久久777| 在线综合欧美| 日本中文字幕不卡| 美女尤物久久精品| 丝袜亚洲另类欧美| 亚洲三级视频| 欧美国产视频| 久久的色偷偷| 国内精品伊人| 91精品久久久久久久久久不卡| www.九色在线| 香蕉视频成人在线观看| 日本一区二区三区中文字幕| 国产精品入口久久| 日韩免费一区| 亚洲精品在线国产| 久久精品国产网站| 一区在线免费观看| 国产精品免费不| 亚洲一级网站| 欧美日韩1区2区3区| 国产精品二区不卡| 久久成人一区| 国产精品主播| 欧美日韩国产免费观看视频| 国产精品欧美大片| 日韩伦理在线一区| 亚洲久久一区| 福利在线免费视频| 久热精品在线| 伊人网在线播放| 欧美一区91| 亚洲免费观看| av免费不卡国产观看| 免费成人av在线播放| 亚洲v在线看| 美女视频一区在线观看| 日韩一区精品视频| 你懂的亚洲视频| 亚洲影视一区| 黑丝一区二区三区| 亚洲黄色网址| 日韩av一二三| 一区二区三区四区日韩| 五月婷婷六月综合| 欧美精品资源| 久久青青视频| 水蜜桃久久夜色精品一区| 日韩精品视频网| 婷婷综合一区| 亚洲精品动态| 午夜久久av| 视频一区免费在线观看| 日韩一区二区中文| 日韩.com| 91亚洲国产| 亚洲综合电影| 成人精品国产亚洲| 麻豆理论在线观看| 五月天av在线| 欧美va天堂在线| 蜜桃成人av| 日韩中文字幕一区二区三区| 麻豆成人在线| 亚洲免费福利一区| 一区二区三区国产在线| 国产午夜精品一区二区三区欧美 | 国产日韩一区二区三免费高清| 国产精品高清一区二区| 国产精品极品在线观看| 久久中文精品| 国产成年精品| 精品一区在线| 蜜臀91精品一区二区三区| 久久亚洲风情| 综合日韩在线| 国产欧美在线观看免费| 欧美黑人巨大videos精品| 国产99在线| 快she精品国产999| 国产精品毛片久久久| 国产综合色区在线观看| 老牛影视一区二区三区| 久久亚洲资源中文字| 亚洲特色特黄| 日韩福利视频网| 久久国际精品| 亚洲精品小说| 97精品久久| 久久国产小视频| 91亚洲无吗| 国产情侣一区在线| 成人在线黄色| 蜜桃视频免费观看一区| 国内自拍视频一区二区三区| 99在线观看免费视频精品观看| 欧美成人精品午夜一区二区| 欧美不卡在线| 91日韩在线| 99视频精品视频高清免费| 国产精品久久久久久久久久齐齐 | 国产激情久久| 欧美一区二区三区久久精品| 夜夜嗨一区二区| 精品捆绑调教一区二区三区| 国产探花在线精品| 亚洲精品在线二区| 91精品尤物| 国产亚洲精品美女久久| 日韩一区二区三区在线看| 亚欧洲精品视频在线观看| 日韩欧美2区| 日韩理论片av| 国产传媒在线观看| 亚洲一区不卡| 国产日韩免费| 国产综合亚洲精品一区二| 欧美精品一卡| 亚洲在线成人| 婷婷综合国产| 久久精品97| 国产不卡av一区二区| 精品久久在线| 日韩一区二区三区在线免费观看| 久久美女精品| 99视频精品免费观看| 亚洲精品日本| 国产精品成人一区二区网站软件| 国产精品极品在线观看| 97国产精品| 国产一区亚洲| 亚洲精品少妇| 欧美男人天堂| 国产精品欧美一区二区三区不卡| 精品美女视频 | 中日韩男男gay无套| 在线午夜精品| 国产精品久久久免费| 欧美www视频在线观看| 91精品精品| 久久精品999| 好吊一区二区三区| 国产精品一区毛片| 久久一区二区三区喷水| 国产精品试看| 麻豆国产一区| 国产毛片一区| 精品国产一区二区三区2021| 女人av一区| 国内不卡的一区二区三区中文字幕 | 久久天堂成人| 石原莉奈一区二区三区在线观看| 亚洲乱码久久| 国产精品中文| 夜夜精品视频| 久久只有精品| 麻豆成人在线| 亚洲精品在线影院| 免费在线观看成人| 国产精品毛片在线| 日本欧美韩国一区三区| 精品中文在线| 欧美日韩国产高清| 国产精品久久久久久久久久白浆| 秋霞影院一区二区三区| 久久国产精品免费一区二区三区| 99久久99久久精品国产片果冰 | 国产专区一区| 欧美精品第一区| 久久亚洲一区| 啪啪国产精品| 日本va欧美va瓶| 亚洲成人二区| 国产亚洲一区| 国产精品嫩草99av在线| 国产成人精品免费视| 欧美日本精品| 男女性色大片免费观看一区二区| 理论片午夜视频在线观看| 亚洲精品日本| 免播放器亚洲| 欧美日韩一区二区三区视频播放| 国产欧美日韩在线一区二区| 噜噜噜久久亚洲精品国产品小说| 青青青免费在线视频| 国产成人精品一区二区三区在线| 亚洲深深色噜噜狠狠爱网站| 精品亚洲美女网站| 亚洲1234区| 久久婷婷av| 日本欧美不卡| 欧美成人久久| 婷婷综合社区| 欧美在线综合| 亚洲乱码视频| 国产亚洲人成a在线v网站|