easyswoole - 基于swoole扩展实现的一款高性能php框架

參數注解校驗

Easyswoole控制器總共有三個參數注解標簽,分別是:

  • @Param EasySwoole\HttpAnnotation\AnnotationTag\Param
  • @ApiAuth EasySwoole\HttpAnnotation\AnnotationTag\ApiAuth
  • @ApiGroupAuth EasySwoole\HttpAnnotation\AnnotationTag\ApiGroupAuth

ApiAuthApiGroupAuth均繼承自Param,對于任意一個參數注解,都要求填寫注解的name字段。

Param對象實際上是對Easyswoole/Validate參數驗證組件驗證規則的封裝,底層是調用該組件進行參數校驗。

當校驗失敗的時候,則會拋出一個EasySwoole\HttpAnnotation\Exception\Annotation\ParamValidateError異常,可以在控制器的onExcepion中進行處理。

@Param

基礎參數注解,作用域在控制器的actionMethodonRequest均為有效。例如在以下代碼中:

/**
* @Param(name="name",required="",lengthMax="25")
* @Param(name="age",integer="")
*/
function index()
{
    $data = $this->request()->getRequestParam();
    $this->response()->write("your name is {$data['name']} and age {$data['age']}");
}

那么則規定了index這個action需要nameage這兩個參數,且校驗規則分別為required="",lengthMax="25"integer=""

參數的接收

在控制器的Request對象中得到的參數值,為客戶端提交的原始值,參數的注解校驗或者預處理,并不會影響原始值。但是通過控制器自動傳參或者是上下文注解標簽得到的參數,則為經過預處理后的參數。

自動傳參
/**
* @Param(name="name",required="",lengthMax="25",from={GET,POST})
* @Param(name="age",type="int")
*/
function index($age,$name)
{
   $data = $this->request()->getRequestParam();
   $this->response()->write("your name is {$name} and age {$age}");
}

當某個action定義了參數,且有注解的時候,那么控制器會利用反射機制,根據函數定義的參數名,去取對應的參數。

注解傳參數
/**
* @Param(name="name",required="",lengthMax="25",from={GET,POST})
* @Param(name="age",type="int")
* @InjectParamsContext(key="data")
*/
function index()
{
    $data = ContextManager::getInstance()->get('data');
    $this->response()->write("your name is {$data['name']} and age {$data['age']}");
}

通過@InjectParamsContext標簽,完整命名空間是EasySwoole\HttpAnnotation\AnnotationTag\InjectParamsContext,我們可以把通過驗證的參數,設置到指定的協成上下文中,并通過上下文管理器EasySwoole\Component\Context\ContextManager得到對應的參數。其中,除了必填的key字段,還有如下幾個字段:

  • onlyParamTag

    忽略@ApiAuth@ApiGroupAuth定義的參數

  • filterNull

    忽略值為null的參數

  • filterEmpty

    忽略值被empty()判定為true的參數,注意數字0或者是字符串0與空字符串等問題

附加字段

@Param注解除了name字段為必填項,還有以下幾個輔助字段。

from

例如在以下注解中:

* @Param(name="name",required="",lengthMax="25",from={GET,POST})
* @Param(name="age",integer="",from={POST})

則規定了name字段允許的取參順序為:GET => POST,而age參數就僅僅允許為 POST 傳參。目前from的允許值為: POSTGETCOOKIE,HEADER,FILE,DI,CONTEXT,RAW,JSON,SESSION,ROUTER_PARAMS。在無規定from字段時,默認以$request->getRequestParam($paramName)方法獲得參數值。具體實現可以在EasySwoole\HttpAnnotation\AnnotationController__handleMethodAnnotation方法中查看。

type

例如以下注解中:

* @Param(name="age",type="int")

通過函數自動傳參,或者是@InjectParamsContext得到的參數時,會對age這個參數進行intval()處理。type字段可選值為:stringint,double,real,floatbooljsonarray,具體可以在EasySwoole\HttpAnnotation\AnnotationTag\ParamtypeCast方法中查看。

defaultValue

在客戶端沒有傳遞該參數的值時,可以用該字段進行默認值的定義。

preHandler

該字段是用于對某個參數值不為null時進行預處理。preHandler需要是一個callable,例如

* @Param(name="password",preHandler="md5")

則通過函數自動傳參,或者是@InjectParamsContext得到的參數時,password會被自動執行md5()

description

該字段主要用戶自動生成文檔時,參數的描述說明。

@ApiAuth

@ApiAuth注解標簽,完整的命名空間是EasySwoole\HttpAnnotation\AnnotationTag\ApiAuth,作用域在控制器的actionMethodonRequest均為有效,本質與@Param標簽并無區別,僅僅是在自動生成文檔的時候,@Param被描述為請求參數,而@ApiAuth則會被描述為權限參數。

控制器全局參數

全局注解標簽是@ApiGroupAuth,完整的命名空間是EasySwoole\HttpAnnotation\AnnotationTag\ApiGroupAuth,作用域在整個控制器。

namespace App\HttpController;

use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\AnnotationTag\ApiGroupAuth;

/**
 * Class Index
 * @ApiGroupAuth(name="token",required="")
 * @package App\HttpController
 */
class Index extends AnnotationController
{

}

這樣的注解表示,Index控制器下的任何請求,都需要token這個參數。

參數覆蓋優先順序

@Param > @ApiAuth > @ApiGroupAuth

主站蜘蛛池模板: 惠声电子、广州市惠声电子科技有限公司、VBS、VBS惠声电子、VBS公共广播生产厂家、VBS广播功放生产厂家、VBS会议系统设备批发、VBSIP网络对讲系统厂家、VBS会议系统厂家、VBS智能中控厂家、VBS专业扩声厂家 | 连云港物流,连云港物流公司就选连云港华美物流有限公司 | 南京文化墙设计公司,南京包装设计制作印刷,南京PPT设计公司,导视制作公司,企业logo设计 | 联系我们-99公司开户电话-99厅 | 随车挖生产厂家_山东精久工程机械有限公司 | 铝合金锻造|链轮曲柄-同力铝业股份有限公司 | 淮南网站制作丨淮南做网站丨淮南网络公司丨淮南哪家网络公司好丨淮南智讯网络 | 主营:回收各类废旧物资,上海巨合物资回收有限公司官方网站 | 注塑机螺杆_光学无卤耐磨耐腐蚀螺杆_合金材料_螺杆研磨抛光机_杰宇螺杆 | 乳化泵-高剪切乳化机-减速机支架-乳化罐-釜底乳化机【厂家】-浙江奥盛机械 | 深圳诚暄软板首页-fpc软板,fpc软性线路板打样生产厂家 | 化妆粉扑厂家【秀兰】一线品牌资格供应商_海绵粉扑批发_气垫粉扑价格_广州秀兰生物科技有限公司 化工招聘网 化工人才网|化工英才网-化工企业招聘首选网站 | 耐压测试仪(检测电气设备绝缘性能)百科| 自动封箱机_纸箱封箱机_封箱机厂家-青岛百高包装器材有限公司 | 真空上料机_加料机_天津自动上料机_投料站_包装机加料_吸料机_粉体称重-天津市飞云粉体设备有限公司 | 增压泵-离心泵-管道泵-排污泵-上海渤泉泵业制造有限公司 【官方网站】 | 中派康明斯发电机_玉柴发电机厂家_静音移动拖车发电机-深圳市斯坦福电力设备有限公司 | 新颖科技 - 家电及汽车外饰面板供应商 | 无锡大型数控龙门铣加工中心,精密焊接件制造,机械设备加工-无锡嘉迅机械科技有限公司 | 烧碱-工业片碱-火碱价格-氢氧化钠厂家-巩义市宝莱新材料厂 | 中国水泥协会-官方网站| 河南郑州纯净水设备_厂家_价格_河南江宇环保科技有限公司水处理设备工厂 | 在线播放国产精品|哔咔漫画破解版永久vip兑换码|免费黄漫画|女被黄漫扒衣服软件|91精品麻豆 | 山东凯达起重机械有限公司-单梁行车,龙门吊,提梁机,门式起重机,悬臂起重机 | 微机继电保护测试仪,单相继电保护测试仪,三相继电保护测试仪,六相继电保护测试仪,介质损耗测试仪,氧化锌避雷器测试仪,无线核相仪-扬州豪泰电力科技有限公司 | 昆明塑料包装袋|云南塑料包装袋|昆明塑料袋厂家|云南茶叶大米蔬菜种子食品包装袋就来阮门包装有限公司 | 南京货架|仓库货架|货架公司|仓储货架工厂批发定做-南京苏正科技实业公司 | 频闪仪,便携式频闪仪厂家_灯管,频闪仪之父-杭州品拓电子技术有限公司 | 深圳市金正电器有限公司| 学汽修-汽修培训-郑州万通汽车学校[官网] | 纠偏系统厂家-迈欣机械| 橡塑保温材料_防火保温材料_保温棉_东莞康成保温材料有限公司 | 深圳危化品经营许可证_危险化学品经营许可证办理 | 展馆展厅设计_数字多媒体展厅_3D全息投影_三维动画制作_企业宣传片|深圳市华南数字科技有限公司 斩天手游网_高质量手机游戏下载中心 | 实验室超纯水机-超纯水机-超纯水仪-上海赫恩实业有限公司 | 太原重卡叔叔运输有限公司-山西太原大件运输、太原物流公司、太原货运物流、太原大件运输、太原货运信息、长治物流公司、长治大件运输、晋城物流公司、晋城大件运输、忻州大件运输、朔州大件运输、阳泉大件运输、大同大件运输、吕梁大件运输、临汾大件运输、运城大件运城 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 | 四氟瓶塞-塑料离心机-双联恒温水浴锅-常州天瑞仪器有限公司 | 廊坊金星化工有限公司-钢套钢保温管厂家,玻璃钢缠绕保温管,镀锌铁皮保温管厂家,廊坊金星化工有限公司 | 上海熙隆光电科技有限公司-半导体激光器,一字线激光器,光纤耦合激光器,拉曼激光器 | 抛丸机-通过式抛丸机-履带吊钩式抛丸机厂家-青岛泓霖智能设备公司 |