控制器中间件
一、后期筹备
(一)定义路由
设置 RESTFul
申请的资源路由
Route::resource('mymiddle','MyMiddleware')->vars(['mymiddle'=>'name]']);
注:resource
前面跟着的 vars
办法是用于扭转其中的变量名,默认的变量名是 id
。
以 read
的办法为例:
默认路由:
Route::get('mymiddle/:id','MyMiddleware/read');
批改变量名后的路由:
Route::get('mymiddle/:name','MyMiddleware/read');
(二)生成控制器
应用命令:
php think make:controller MyMiddleware
批改代码如下:
<?php
declare (strict_types = 1);
namespace app\controller;
use think\Request;
use app\handlers\JsonResponseHandler;
use think\response\Json;
class MyMiddleware
{public function index()
{$time = date('Y-m-d H:i:s',time());
return JsonResponseHandler::succ('操作胜利',['greeting'=>'hello','time'=>$time]);
}
public function save(Request $request)
{$params = $request->param();
$name = $params['name'];
return JsonResponseHandler::succ('name'.$name.'保留胜利');
}
public function read($name)
{return JsonResponseHandler::succ('操作胜利',['name'=>$name]);
}
public function edit($name)
{return JsonResponseHandler::succ('将 name 为'.$name.'的数据找进去,并显示到页面');
}
public function delete($name)
{return JsonResponseHandler::succ('name'.$name.'曾经被删除');
}
}
二、中间件
(一)生成中间件类
应用命令生成中间件:
php think make:middleware Check
批改中间件类,减少一个判断的逻辑,如果以后申请的 name
参数等于 think
的时候,就返回谬误的响应:
<?php
declare (strict_types = 1);
namespace app\middleware;
use app\handlers\JsonResponseHandler;
class Check
{
/**
* 解决申请
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{if($request->param('name') == 'think'){return JsonResponseHandler::error('name 不能为 think');
}
return $next($request);
}
}
(二)定义中间件别名
在利用 config
目录下的 middleware.php
中先预约义中间件(其实就是减少别名标识):
<?php
// 中间件配置
return [
// 别名或分组
'alias' => ['check' => app\middleware\Check::class,],
// 优先级设置,此数组中的中间件会依照数组中的程序优先执行
'priority' => [],];
(三)控制器中间件
在 MyMiddleware
控制器中定义 middleware
属性:
<?php
declare (strict_types = 1);
namespace app\controller;
use think\Request;
use app\handlers\JsonResponseHandler;
use think\response\Json;
class MyMiddleware
{
// 定义 middleware 属性
protected $middleware = ['check' => ['only'=>['save','read']]
];
public function index()
{$time = date('Y-m-d H:i:s',time());
return JsonResponseHandler::succ('操作胜利',['greeting'=>'hello','time'=>$time]);
}
.
.
.
}
在 MyMiddleware
控制器新增的代码:
protected $middleware = ['check' => ['only'=>['save','read']]
];
only
,只有。这段代码意为 check
中间件只拦挡 MyMiddleware
控制器的 save
和 read
办法。
与之对应的还有 except
关键字。except
,除了,即除了指定的办法,其余的办法都会拦挡。
protected $middleware = ['check' => ['only'=>['save','read']]
];
这段代码意为 check
中间件除了 save
、read
办法,其余办法都会拦挡。
(四)测试
先正文 middleware
属性:
测试 save
办法,save
办法的路由:
POST mymiddle
调用接口:
勾销 middleware
属性:
再次调用接口:
参考资料
- TP6 文档