您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何創建laravel HTTP中間件,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
中間件其實就是在路由上面加了一層過濾或是一層保護,前綴和命名空間都是作為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' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ];
定義后:
protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'admin.login' => \App\Http\Middleware\AdminLogin::class, ];
在cmd窗口切換到項目目錄可以用命令創建中間件
php artisan make:middleware AdminLogin
然后在Middleware文件夾查看AdminLogin.php文件
<?php namespace App\Http\Middleware; use Closure class AdminLogin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $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'=>123]); return view('welcome'); }); Route::get('/test',function(){ echo session('key'); return 'test'; }); });
三、后臺超級管理員的驗證
Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'web'], function () { Rount::get('login','IndexController@login');//登錄不需要后臺管理員的超級認證 }); Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'admin.login'], function () { Rount::get('index','IndexController@index');//超級管理員需要認證后才能進入歡迎頁面和編輯頁面 Rount::resource('article','ArticleController'); });
任何一個用戶都可以登錄,但是如果登錄了成功,就進入歡迎頁面,沒有登錄成功就在登錄頁面,因為登錄的信息存到session里,所以我們利用session的信息判斷是否登錄
模擬登錄是將登錄信息寫到session里面,然后找到Admin包下IndexController控制器
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; class IndexController extends Controller { public function index(){ return view('welcome'); } function login(){ session(['admin'=>1]); //登錄信息用admin存儲 return '<h2>登錄<h2>' } }
我們在中間件里輸出session測試一下
然后在Middleware文件夾查看AdminLogin.php文件
<?php namespace App\Http\Middleware; use Closure class AdminLogin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { echo session('admin'); return $next($request); } }
驗證:
我們先登錄一下,然后訪問歡迎頁面,如果輸出1,表示我們設置成功了(登錄時把1存到session里,然后進入歡迎頁面,歡迎頁面會調用中間件的AdminLogin.php,),
我們繼續設置
Middleware文件夾的AdminLogin.php文件
<?php namespace App\Http\Middleware; use Closure class AdminLogin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if(!session('admin')){ return redirect('admin/login'); //如果沒有登錄跳轉到登錄頁面 }; return $next($request); } }
上述內容就是如何創建laravel HTTP中間件,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。