Home >PHP Framework >Laravel >[Note organization] Introduction and creation of laravel HTTP middleware
The following are the notes I compiled while watching videos on the php Chinese website for your reference. The following are some basic knowledge. If you are not familiar with the basic knowledge, you can take a look. The last article I shared was about composer installing laravel. If you want to see more articles, follow me. I hope I can help you.
Middleware is actually a layer of filtering or protection added to the route. The prefix and namespace are passed in as the array parameters of the group, and the middleware is also passed in as the array parameters of the group
1. Middleware writing
Before adding middleware
Route::group(['prefix' => 'admin','namespace'=>'Admin'], function () { Rount::get('login','IndexController@login'); Rount::get('index','IndexController@index'); });
After adding web middleware
Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>['web']], function () { Rount::get('login','IndexController@login'); Rount::get('index','IndexController@index'); });
web middleware can be used session function, enable CSRF protection
Route::get('/',function(){ session(['key'=>123]); return view('welcome'); });
and set up a route to output the session
Route::get('/test',function(){ echo session('key'); return 'test'; });
But because it is not in a middleware, the value of the session cannot be retrieved
Next we set up the middleware that puts the route into a group
Route::group(['middleware'=>['web']], function () { Route::get('/',function(){ session(['key'=>123]); return view('welcome'); }); Route::get('/test',function(){ echo session('key'); return 'test'; }); });
The system default web middleware, the middleware is in Kernel.php
Session will be used only when using web middleware
2. Manually define a background management cloud login middleware in the Kernel.php file
Before definition:
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, ];
After definition:
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, ];
Switch to the project directory in the cmd window and use the command to create middleware
php artisan make:middleware AdminLogin
Then check the AdminLogin.php file in the Middleware folder
<?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); } }
Then call the middleware just created File
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'; }); });
3. Verification of the background super administrator
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'); });
Any user can log in, but if the login is successful, the welcome page will be entered, and the login is not successful. Just on the login page, because the login information is stored in the session, we use the session information to determine whether to log in
Simulating login is to write the login information into the session, and then find the IndexController controller under the Admin package
<?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>' } }
We output the session in the middleware to test it
Then check the AdminLogin.php file in the Middleware folder
<?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); } }
Verification:
We log in first, and then visit the welcome page. If 1 is output, it means that our setting is successful (save 1 in the session when logging in, and then enter the welcome page. The welcome page will call the middleware's AdminLogin.php,),
We continue to set up the AdminLogin.php file in the Middleware folder
##
<?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); } }The above steps are my study notes, I put the steps or key points to be operated I've written it down, and if you don't understand something, you can leave a message. Thank you for your support. I hope I can help you. If you want to see more information, follow me and continue to share in the next article.
The above is the detailed content of [Note organization] Introduction and creation of laravel HTTP middleware. For more information, please follow other related articles on the PHP Chinese website!