中间件有什么用
Laravel中间件提供一个方便的机制来过滤进入应用程序的HTTP请求
场景
有一个活动,在指定日期后开始,如果活动没开始只能访问宣传页面
在App\Http\Middleware新建中间件:
命名为Activity.php
<?php
namespace App\Http\Middleware;
use Closure; //这是一个全局的类
class Activity
{
// 前置操作
public function handle($request, Closure $next) //Closure是PHP全局的一个类(闭包函数)
{
if(time() < strtotime('2019-04-11')) {
return redirect('activity0');
}
return $next($request);
}
}
在namespace App\Http、Kernel.php中添加中间件:
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,
'activity' => \App\Http\Middleware\Activity::class, //这是新添加的
];
在路由文件中添加路由组中间件
Route::get('response', ['uses' => 'StudentController@response']);
//宣传页面
Route::get('activity0', ['uses' => 'StudentController@activity0']);
//活动页面
Route::group(['middleware' => ['activity']], function() {
Route::get('activity1', ['uses' => 'StudentController@activity1']);
Route::get('activity2', ['uses' => 'StudentController@activity2']);
});
后置操作
public function handle1($request, Closure $next){
$response = $next($request); //这是操作
echo $response;
echo '我是后置操作';
return $response;
}
控制器
class StudentController extends Controller
{
//活动宣传页面
public function activity0()
{
//echo date('Y-m-d H:i:s', time()+3600*8);
return '活动快要开始了,尽情期待';
}
//活动宣传页面
public function activity1()
{
return '活动进行中,谢谢您的参与1';
}
//活动宣传页面
public function activity2()
{
return '活动进行中,谢谢您的参与2';
}
}
访问浏览器activity1,activity2页面时,会触发中间件中的判断;