Laravel5 自定義路由中間件的使用步驟,太好用,珍藏了!

前言

Laravel5中我們處理request請求,中間會有很多環節。本文所說的中間件,位於路由和控制器之間,起到過濾和篩選請求的作用。


Laravel5 自定義路由中間件的使用步驟,太好用,珍藏了!


為什麼不放到“表單驗證”裡呢?

因為有些請求,我們可能不太理會表單內容,或者想要在表單數據注入控制器方法之前,就進行攔截,那麼,中間件無疑是一個好的選擇。


創建中間件

下面示例,創建一箇中間件,用於判斷用戶是否進行了“實名認證”。如果驗證過,則通過;未驗證,則返回提示信息。

首先使用指令

<code>php artisan make:middleware CheckRealname/<code>

這會在 App\\Http\\Middleware命名空間下新建一個類文件 CheckRealname.php。

下面我們在類文件內填充代碼。

<code>
namespace App\\Http\\Middleware;

use Closure;

class CheckRealname
{

/**
* 處理傳入的請求,假設用戶授權登錄
*
* @param \\Illuminate\\Http\\Request $request
* @param \\Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->user()->is_realname) {
return response()->json(['code'=>0,'msg'=>'請先進行實名驗證']);
}

return $next($request);
}
}/<code>

上述代碼根據用戶授權狀態獲取用戶實例,並查找字段is_realname,判斷用戶的“實名驗證”狀態。如果沒有驗證,使用

<code>response()->json()/<code>

構造一個JSON響應數據返回給客戶端。那麼接下來的請求都不需要進行。

如果是驗證過的用戶,使用

<code>return $next($request)/<code>

繼續後面的邏輯處理。


註冊中間件

完成中間件的類代碼後,我們需要註冊到 路由中間件,並讓系統賦予全局可訪問的方式。

在文件 App\\Http\\Kernel.php 內添加一下內容。

<code>// 在 App\\Http\\Kernel 類中...

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,

// 驗證是否實名認證
'user.realname' => \\App\\http\\Middleware\\CheckRealname::class,
];/<code>

這樣系統內就可以在路由控制內調用該中間件用於驗證了。


調用中間件

調用中間件在路由規則內書寫。類似下面這樣的寫法:

<code>Route::get('user/profile', function () {
// 邏輯代碼,可直接執行
})->middleware('auth', 'user.realname');/<code>

除了使用路由中間件名字的方式,還可以使用使用中間件類,如下:

<code>Route::get('user/profile', function () {
// 邏輯代碼,可直接執行
})->middleware(CheckRealname::class);/<code>

需要注意的是,在頭部 use 引用中,將類 CheckRealname 通過命名空間引入。


結語

好了,上面就是laravel自定義中間件的使用過程,相信大家可以很快掌握。

自定義的中間件可以為我們處理更為複雜的邏輯,也使控制器代碼更為整潔,不會把所有邏輯都堆在控制器內,維護起來臃腫冗餘。

Happy coding :-)


【本文由 @程序員小助手 發佈,持續分享編程故事,歡迎關注】


分享到:


相關文章: