【筆記整理】laravel HTTP中間件的介紹及創建

下面是我看php中文網的視頻整理的筆記,供大家參考。以下是一些基礎知識,如果對基礎知識不熟悉的可以看看。我上一遍文章分享的是composer安裝laravel,想看更多文章,關注我,希望能給大家提供幫助。

中間件其實就是在路由上面加了一層過濾或是一層保護,前綴和命名空間都是作為group的數組參數傳進去的,中間件也是作為group的數組參數傳進去

一、中間件書寫

添加中間件前

Route::group(['prefix'?=>?'admin','namespace'=>'Admin'],?function?()?{ Rount::get('login','IndexController@login'); Rount::get('index','IndexController@index'); });

添加web中間件后

Route::group(['prefix'?=>?'admin','namespace'=>'Admin','middleware'=>['web']],?function?()?{ Rount::get('login','IndexController@login'); Rount::get('index','IndexController@index'); });

web中間件可以用session功能,啟用CSRF保護

Route::get('/',function(){ session(['key'=>123]); return?view('welcome'); });

再設置一個路由,用來輸出session

Route::get('/test',function(){ echo?session('key'); return?'test'; });

但因為不在一個中間件里,所以取不出session的值

下面我們設置一下把路由放到一個分組的中間件

Route::group(['middleware'=>['web']],?function?()?{ Route::get('/',function(){ session(['key'=>123]); return?view('welcome'); }); Route::get('/test',function(){ echo?session('key'); return?'test'; }); });

系統默認的web中間件,中間件在Kernel.php中

使用web中間件時,才會使用session

二、自己手動在Kernel.php文件中定義一個后臺管理云登錄的中間件

定義前:

protected?$routeMiddleware?=?[ ????????'auth'?=>?IlluminateAuthMiddlewareAuthenticate::class, ????????'auth.basic'?=>?IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, ????????'guest'?=>?AppHttpMiddlewareRedirectIfAuthenticated::class, ????????'throttle'?=>?IlluminateRoutingMiddlewareThrottleRequests::class, ????];

定義后:

protected?$routeMiddleware?=?[ ????????'auth'?=>?IlluminateAuthMiddlewareAuthenticate::class, ????????'auth.basic'?=>?IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, ????????'guest'?=>?AppHttpMiddlewareRedirectIfAuthenticated::class, ????????'throttle'?=>?IlluminateRoutingMiddlewareThrottleRequests::class, ?'admin.login'?=>?AppHttpMiddlewareAdminLogin::class, ????];

在cmd窗口切換到項目目錄可以用命令創建中間件

php?artisan?make:middleware?AdminLogin

然后在Middleware文件夾查看AdminLogin.php文件

<?php namespace AppHttpMiddleware; use Closure class AdminLogin {     /**      * Handle an incoming request.      *      * @param  IlluminateHttpRequest  $request      * @param  Closure  $next      * @return mixed      */     public function handle($request, Closure $next)     {        echo 12344445;         return $next($request);                          } }

然后調用剛才創建的中間件

Route::group(['middleware'=>['web','admin.login'],],?function?()?{ Route::get('/',function(){ session(['key'=&gt;123]); return?view('welcome'); }); Route::get('/test',function(){ echo?session('key'); return?'test'; }); });

三、后臺超級管理員的驗證

Route::group(['prefix'?=&gt;?'admin','namespace'=&gt;'Admin','middleware'=&gt;'web'],?function?()?{ Rount::get('login','IndexController@login');//登錄不需要后臺管理員的超級認證 }); Route::group(['prefix'?=&gt;?'admin','namespace'=&gt;'Admin','middleware'=&gt;'admin.login'],?function?()?{ Rount::get('index','IndexController@index');//超級管理員需要認證后才能進入歡迎頁面和編輯頁面 Rount::resource('article','ArticleController'); });

任何一個用戶都可以登錄,但是如果登錄了成功,就進入歡迎頁面,沒有登錄成功就在登錄頁面,因為登錄的信息存到session里,所以我們利用session的信息判斷是否登錄

模擬登錄是將登錄信息寫到session里面,然后找到Admin包下IndexController控制器

<?php namespace AppHttpControllersAdmin; use AppHttpControllersController; class IndexController extends Controller { public function index(){ return view(&#39;welcome&#39;); }     function login(){ session([&#39;admin&#39;=>1]);?//登錄信息用admin存儲 ?????return?'<h1>登錄<h1>' ???} }</h1> </h1>

我們在中間件里輸出session測試一下

然后在Middleware文件夾查看AdminLogin.php文件

<?php namespace AppHttpMiddleware; use Closure class AdminLogin {     /**      * Handle an incoming request.      *      * @param  IlluminateHttpRequest  $request      * @param  Closure  $next      * @return mixed      */     public function handle($request, Closure $next)     {        echo session(&#39;admin&#39;);         return $next($request);                          } }

驗證:

我們先登錄一下,然后訪問歡迎頁面,如果輸出1,表示我們設置成功了(登錄時把1存到session里,然后進入歡迎頁面,歡迎頁面會調用中間件的AdminLogin.php,),

我們繼續設置

Middleware文件夾的AdminLogin.php文件

<?php namespace AppHttpMiddleware; use Closure class AdminLogin {     /**      * Handle an incoming request.      *      * @param  IlluminateHttpRequest  $request      * @param  Closure  $next      * @return mixed      */     public function handle($request, Closure $next)     {         if(!session(&#39;admin&#39;)){ return redirect(&#39;admin/login&#39;); //如果沒有登錄跳轉到登錄頁面 };         return $next($request);                          } }

以上步驟是我學習的筆記,我把要操作的步驟或重點的記了下來,如果哪有不懂可以留言。謝謝大家支持。希望能為大家提供幫助,如果想看更多信息,關注我,下一篇繼續分享。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享