1.前期准备(1)定义路由,为RESTFul请求设置资源路由Route::resource('mymiddle','MyMiddleware')->vars(['mymiddle'=>'姓名]']);注意:vars方法后面跟resource是用来改变变量名的,默认变量名是id。以读取方法为例:默认路由:Route::get('mymiddle/:id','MyMiddleware/read');修改变量名后的路由:Route::get('mymiddle/:name','MyMiddleware/read');(2)使用命令生成controller:phpthinkmake:controllerMyMiddleware修改代码如下:'你好','time'=>$time]);}publicfunctionsave(Request$request){$params=$request->param();$name=$params['name'];returnJsonResponseHandler::succ('name'.$name.'保存成功');}publicfunctionread($name){returnJsonResponseHandler::succ('操作成功',['name'=>$name]);}publicfunctionedit($name){returnJsonResponseHandler::succ('找出名称为'.$name.'的数据并显示在页面上');}公共函数删除($名称){returnJsonResponseHandler::succ('name'.$name.'hasbeendeleted');}}2、中间件(1)生成中间件类使用命令生成中间件:phpthinkmake:middleware检查修改中间件类,增加判断逻辑,如果当前请求的name参数等于think,则返回错误response:param('name')=='think'){returnJsonResponseHandler::error('namecannotbethink');}返回$next($request);}}(2)在applicationconfig目录下定义中间件别名middleware.php先定义中间件(其实就是加一个别名标识):['check'=>app\middleware\Check::class,],//优先级设置,这个数组中的中间件会按照数组中的顺序先执行'priority'=>[],];(3)Controller中间件在MyMiddleware控制器中定义middleware属性:['only'=>['save','读']]];publicfunctionindex(){$time=date('Y-m-dH:i:s',time());returnJsonResponseHandler::succ('操作成功',['greeting'=>'你好','time'=>$time]);}。..}在MyMiddlewarecontroller中添加代码:protected$middleware=['check'=>['only'=>['save','read']]];only,只有这段代码表示check中间件只拦截save并读取MyMiddleware控制器的方法。与之对应的是except关键字。except,except,即除了指定的方法,其他的方法都会被拦截。protected$middleware=['check'=>['only'=>['save','read']]];这段代码的意思是除了check中间件的save和read方法,其他的方法都会被拦截。(四)测试1.测试save方法,先注解中间件属性:测试save方法,save方法的路由:POSTmymiddle调用接口:从结果看,注解中间件属性后save方法没有被拦截。取消中间件属性的注释:再次调用接口:从结果来看,拦截了save方法。2、测试delete方法测试delete方法,delete方法的路由如下:DELETEmymiddleware/:name调用delete接口,结果如下:从结果看,delete方法没有被拦截。参考TP6文档
