成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Laravel中間件的使用詳解

瀏覽:324日期: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
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国内精品第一页| 亚洲一区在线视频| 欧美日韩久久不卡| 精品剧情在线观看| 综合婷婷亚洲小说| 精品一区二区三区免费| 成人av免费观看| 宅男噜噜噜66国产日韩在线观看| 欧美伊人精品成人久久综合97| 久久一区二区视频| 亚洲成人资源网| 不卡欧美aaaaa| 香蕉免费一区二区三区在线观看| 91精品国产麻豆国产自产在线| 欧美激情在线观看视频免费| 日日夜夜免费精品视频| 成人h动漫精品一区二区| 一本色道精品久久一区二区三区 | 久久久久久免费毛片精品| 亚洲午夜一区二区三区| 成人免费毛片app| 久久久人人人| 国产欧美一区二区三区在线看蜜臀| 麻豆精品精品国产自在97香蕉| 欧美久久久久久久| 欧美美女直播网站| 亚洲精品一卡二卡| 成人av电影观看| 久久久精品网| 中文字幕免费在线观看视频一区| 狠狠色综合播放一区二区| 激情欧美丁香| 日韩亚洲欧美一区二区三区| 午夜影院久久久| 国产伊人精品| 日韩欧美国产综合一区| 婷婷开心激情综合| 欧美日本一区二区视频在线观看| 欧美天堂亚洲电影院在线播放| 亚洲欧美日韩国产中文在线| 国产激情91久久精品导航| 免费看的黄色欧美网站| 国产亚洲欧美激情| 国产一区二区剧情av在线| 一区二区三区四区五区精品视频| ww久久中文字幕| 韩国三级中文字幕hd久久精品| 免费欧美在线| 中文字幕一区二区三区不卡在线 | 国产精品99免费看| 91精品国产美女浴室洗澡无遮挡| 视频一区在线播放| 国产偷自视频区视频一区二区| 久久久另类综合| 激情久久五月天| 免费试看一区| 国产精品久久久久一区二区三区 | 女人香蕉久久**毛片精品| 欧美蜜桃一区二区三区| 天天做天天摸天天爽国产一区| 亚洲免费激情| 国产精品毛片久久久久久| 不卡一卡二卡三乱码免费网站| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲一二三区在线| 久久婷婷综合激情| 国产91精品一区二区麻豆网站| 成人av网站免费| 在线播放一区二区三区| 午夜激情久久久| 精品91在线| 国产欧美精品一区二区三区四区| 丁香激情综合五月| 欧美日韩国产综合视频在线观看| 亚洲成人手机在线| 亚洲高清视频在线观看| 中文字幕免费不卡| 欧美日韩18| 欧美国产精品一区二区| 99re热这里只有精品视频| 日韩一区二区三区高清免费看看| 日本va欧美va精品发布| 亚洲视频高清| 久久综合久久综合亚洲| 国产尤物一区二区| 欧美午夜精品久久久久久孕妇| 午夜av区久久| 国产精品区一区| 尤物在线观看一区| 亚洲精品裸体| 亚洲人亚洲人成电影网站色| 欧美激情91| 久久久影视传媒| 成人av在线一区二区三区| 2023国产一二三区日本精品2022| 国产91精品免费| 欧美一区午夜精品| 国产成a人无v码亚洲福利| 日韩精品一区二区三区在线播放| 九色porny丨国产精品| 在线观看国产日韩| 久久国产婷婷国产香蕉| 日本韩国一区二区| 轻轻草成人在线| 久色成人在线| 免费一级片91| 欧美系列日韩一区| 亚洲欧洲日产国码二区| 亚洲精品1区2区| 亚洲女人****多毛耸耸8| 伊人久久大香线蕉综合热线| 亚洲人123区| 亚洲激情综合| 亚洲国产综合在线| 日本韩国欧美国产| 国内成人精品2018免费看| 777奇米四色成人影色区| 国产在线不卡一卡二卡三卡四卡| 制服.丝袜.亚洲.中文.综合| 成人免费av网站| 国产欧美一区二区精品性色超碰| 伊人久久婷婷色综合98网| 亚洲综合色自拍一区| 在线免费视频一区二区| 国产一区二区91| 亚洲精品在线电影| 欧美日韩精品免费观看视一区二区| 成人欧美一区二区三区1314| 国产欧美一区二区三区另类精品 | 不卡高清视频专区| 国产精品美女久久久久久2018| 在线精品福利| 图片区小说区国产精品视频 | 成人免费在线视频观看| 免费看亚洲片| 久久狠狠亚洲综合| 精品不卡在线视频| 影音先锋中文字幕一区二区| 亚洲成av人综合在线观看| 欧美猛男gaygay网站| 91视频免费观看| 综合分类小说区另类春色亚洲小说欧美| 国产美女精品| 经典一区二区三区| 久久精品亚洲乱码伦伦中文| 亚洲欧洲日夜超级视频| 蜜桃久久久久久久| 精品国产a毛片| 国产亚洲一区在线| 精品一区二区免费视频| 久久久久久久综合狠狠综合| 国产欧美日韩| 激情另类小说区图片区视频区| 精品国产青草久久久久福利| 国产一区美女| 日韩激情在线观看| 日韩一区二区三区电影在线观看| 亚洲欧美伊人| 日本人妖一区二区| 久久综合九色综合97_久久久| 亚洲一区二区免费看| 国产精品一区免费在线观看| 国产精品伦理一区二区| 久久经典综合| www.亚洲色图.com| 亚洲一区二区五区| 日韩欧美国产三级电影视频| 在线观看视频日韩| 国产一区福利在线| 中文字幕二三区不卡| 在线亚洲欧美专区二区| 中文字幕日韩av资源站| 欧美日韩一区二区三区四区 | 国产亚洲精品资源在线26u| 国产婷婷精品| 成人一区在线看| 水野朝阳av一区二区三区| 国产视频一区不卡| 欧美视频第二页| 黄色成人91| 国产精品综合一区二区| 亚洲精品视频一区二区| 337p亚洲精品色噜噜噜| 亚洲美女视频在线免费观看| 国产福利一区二区三区视频在线 | 国产精品人人做人人爽人人添| 欧美色区777第一页| 欧美一站二站| 蜜臀久久久久久久| 亚洲国产精品二十页| 欧美日韩在线免费视频| 国产精品v日韩精品v欧美精品网站| 日韩制服丝袜av| 国产精品网站一区| 5858s免费视频成人| 一本色道久久综合亚洲精品高清| 国产成都精品91一区二区三| 亚洲成人在线网站| 中文字幕一区二区三区不卡| 欧美一区二区三区视频在线|