以下是我看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' => \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 '<h1>登录<h1>' } }
我們在中間件裡輸出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中間件的介紹及創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!