中间件
中间件是什么: 类似于门卫的作用 每次请求来了先经过中间件筛查
全局中间件: 在全局生效
路由中间件: 在指定的路由生效
使用中间件的方法
1.创建中间件
php artisna make:middleware LogMiddleware
2.在LogMiddleware 中可以定义中间件需要的操作 在handle的方法里
下面是一个使用中间件生成logs文件的简单demo
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class LogMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
//127.0.0.1 在 190315
//获取用户来访的ip
//var_dump( $_SERVER);
$ip = $request->ip();
$date = date("Y-m-d H:i:s");
$url = $request->url();
$str = $ip."在".$date."访问了".$url."\n\r";
$filename = public_path().'/logs/'.date("ymd").".txt";
file_put_contents($filename,$str,FILE_APPEND);
return $next($request);
}
}
3.注册中间件
在kernel.php中 可惜实现路由注册
在这个文件里边其中有三个属性
protected $middleware 代表全局中间件
protected $middlewareGroups 代表中间件组
protected $routeMiddleware 代表路由中间件
4.注册
在你想注册的位置添加中间件
// middleware命名空间\middleware名字::class
\App\Http\Middleware\LogMiddleware::class,
注意一定要从根目录找 也就是命名空间前一定要加\
下边是一个全局中间件的demo
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\LogMiddleware::class,
];
- 中间件的使用 全局中间件不需要使用 在全局生效
路由中间件使用
第一种方式 直接在路由后接middleware demo:
route::get("admin/index","AdminController@index")->middleware('logs');
路由组的中间件
Route::middleware('logs')->group(function () {
route::get('index','Book\BookController@add');
route::post('doadd','Book\BookController@doadd');
route::any('list','Book\BookController@lists');
route::get('login',"Book\UserController@login");
route::post('logindo',"Book\UserController@logindo");
route::get('register',"Book\UserController@register");
route::post('registerdo',"Book\UserController@registerdo");
});
如果路由组多种形式的 比如前缀+中间件 可以使用下面的方式
route::group(['middleware'=>'logs','prefix'=>'book'],function(){
route::get('index','Book\BookController@add');
route::post('doadd','Book\BookController@doadd');
route::any('list','Book\BookController@lists');
route::get('login',"Book\UserController@login");
route::post('logindo',"Book\UserController@logindo");
route::get('register',"Book\UserController@register");
route::post('registerdo',"Book\UserController@registerdo");
});
希望对大家有所帮助