前言官网地址:SW-X框架-专注高性能便捷开发之星的PHP-SwooleX框架:https:///github.com/swoolex/swoolex1,404接口配置HTTP服务,当找不到对应的路由时,会加载/config/route.php配置文件中的404配置。下面是具体的参数配置项:true,//自定义错误处理程序只需要提供一个类的命名空间位置可以是'error_class'=>'\\box\\http_error',];接下来,我们打开/box/http_error.php文件,修改成如下代码:小黄牛*@versionv1.0.1+2020.05.29*@deprecated尚未启用*@globalNone*@returnvoid*/publicfunction__construct(){return\x\Restful::code(\x\Restful::ONROUTE())->回调();}}由于上面使用了\x\Restful组件,抛出一个ONROUTE状态码,所以相应的Restful配置也要修改:/restful/default/code.php修改为如下代码:0,//默认失败状态码'SUCCESS'=>1,//默认成功状态码'ACTION_ERROR'=>40001,//权限验证失败'ONROUTE'=>40004,//不存在界面];/restful/default/msg.php修改为如下代码://对应默认成功状态码'SUCCESS'的提示=>['default'=>'requestsucceeded',//默认值'test'=>'testmsg',],//权限验证失败'ACTION_ERROR'=>['default'=>'权限验证失败',//默认值],//不存在的接口'ONROUTE'=>['default'=>'接口不存在',//默认值],];这个时候我们只是访问一个不存在的接口,http://IP地址:port/api/user/info,可以看到框架抛出如下状态码:{"code":40004,"msg":“接口不存在”,“数据”:[]}2。对请求类型的限制在SW-X中可以通过多种方式来限制某个HTTP控制器的请求类型。第一种是使用@Post、@Get、@Ajax注解进行限制,第二种是使用\x\Validate验证器组件对请求头进行判断和过滤。一般推荐使用第一种方式,因为它非常灵活,而第二种方式一般在同组的某些接口需要过滤相同请求头的时候使用,比如签名判断等业务。接下来,我们将/app/http/v1_0_1/controller/shop/delete.php控制器的代码改成如下:data('您的请求已通过')->callback();同时,因为这个注解的错误信息是通过/box/lifecycle/route_error.php生命周期文件进行回调处理的,所以我们还需要将文件改成如下代码:'只允许Get请求','RouteMethodPost'=>'只允许Postrequests','RouteMethodAjax'=>'OnlyallowAjaxrequests',];/***接受回调处理*@todoNone*@author小黄牛*@versionv1.1.5+2020.07.15*@deprecated尚未启用*@globalnone*@paramSwoole$server服务实例*@paramstring$fd客户端ID*@paramstring$status错误事件状态码*@returnbool*/publicfunctionrun($server,$fd,$status){$tips='注释:SW-X状态:'.$status.'错误!';$type=\x\Config::get('server.sw_service_type');//只处理HTTP服务请求if($type=='http'){if(isset($this->tips[$status]))$tips=$this->tips[$status];返回\x\Restful::code(\x\Restful::LIFECYCLE())->setMsg($tips)->callback();}返回真;}}由于上面使用了\x\Restful组件,抛出了一个LIFECYCLE状态码,所以相应的Restful配置也要修改:/restful/default/code.php修改为如下代码:0,//默认失败状态码'SUCCESS'=>1,//默认成功状态码'ACTION_ERROR'=>40001,//权限验证失败'ONROUTE'=>40004,//NoExistinginterface'LIFECYCLE'=>20001,//路由生命周期错误回调状态码[usecustomMSG]];注意修改生命周期文件后,热重载失效,需要手动停止服务再重启重启后,我们再次访问http://IP地址:端口/api/shop/delete接口,可以看到框架抛出如下状态码:{"code":20001,"msg":"OnlyallowPostrequest","data":[]}如果想测试请求是否成功,可以使用Postman或Jquery等工具发送Post-Ajax请求。3、Validate验证表单数据SW-X,推荐使用\x\Validate验证器组件对请求进行判断过滤。具体使用方法可以参考官方文档:https://www.sw-x.cn/word/v2.5.x/vali_explain.html下面我们为商品分组询问的API创建一个Shop验证器。创建验证器文件/box/validate/Shop.php,编写代码如下:'require|int','title'=>'require|min:10|max:20','info.des'=>'min:10|max:20',];//自定义错误值语句protected$message=['id.require'=>'{id}忘记输入','title.min'=>'{title}不能小于{0}','title.max'=>'{title}不能大于{0}','info.des.min'=>'{:preset}不能小于{0}','info.des.min'=>'{info.des}不能大于{0}',];//场景定义protected$scene=[//修改时使用的场景(简写)'edit'=>['id','info.des'],//需要校验的字段//删除时使用的场景(shorthand)'delete'=>['id'],//需要验证的字段];}接下来,我们将/app/http/v1_0_1/controller/shop/delete.php控制器的代码改成如下:data('验证通过')->回调();同时,由于这个注解的报错信息是由/box/lifecycle/validate_error.php生命周期文件处理的,我们还需要将文件改成如下代码:'.$errors[0]['message'];//只处理抛出的HTTP服务请求if($server_type=='http'){return\x\Restful::code(\x\Restful::VALIDATE())->;setMsg($errors[0]['message'])->callback();}返回真;}}由于上面使用了\x\Restful组件,抛出一个VALIDATE状态码,所以对应的Restful配置也必须修改:/restful/default/code.php修改为如下代码:0,//默认失败状态码'SUCCESS'=>1,//默认成功状态码'ACTION_ERROR'=>40001,//权限验证失败'ONROUTE'=>40004,//不存在的接口'LIFECYCLE'=>20001,//路由生命周期错误回调状态码[usecustomMSG]'VALIDATE'=>20002,//Validator生命周期错误回调状态码[usecustomMSG]];注意修改生命周期文件后,热重载无效,需要手动停止,重启后重启服务,然后访问http://IP地址:端口/api/shop/delete界面,即可看到框架抛出如下状态码:{"code":20002,"msg":"Iforgettoentertheid","data":[]}访问http://IP地址:port/api/shop/delete?id=1,则可以通过删除验证场景。
