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

控制器類注解

控制器類注解指的是可以在控制器類上聲明使用的注解標簽,包括 ParamApiGroup 兩個注解標簽。用于實現對控制器類中成員方法的參數的約束邏輯判斷及注解文檔的生成。

Param 注解

Param 注解,作用域在控制器類聲明中生效,可作為當前控制器類的全局參數去使用。例如在以下代碼中:

<?php
namespace App\HttpController;

use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\Attributes\Param;
use EasySwoole\HttpAnnotation\Validator\Required;

#[Param(
    name: "signature",
    validate: [
        new Required()
    ],
    ignoreAction: [
        "info"
    ]
)]
class Profile extends AnnotationController
{
    public function info() {

    }

    public function foo($signature) {
        $data = $this->request()->getRequestParam();
        $this->response()->write("your name is {$name} and age {$age}");
    }
}

那么則規定了 Profile 這個控制器類除了 info 這個 action 不需要 signature 參數,其他 action 均需要 signature 參數,且校驗規則分別為 required 即要求必填。

參數的接收

自動傳參

<?php
namespace App\HttpController;

use EasySwoole\EasySwoole\Trigger;
use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\Attributes\Param;
use EasySwoole\HttpAnnotation\Exception\ValidateFail;
use EasySwoole\HttpAnnotation\Validator\Required;

#[Param(
    name: "signature",
    validate: [
        new Required()
    ],
    ignoreAction: [
        "info"
    ]
)]
class Profile extends AnnotationController
{
    public function foo($signature)
    {
        $this->response()->write("the signature is {$signature}");
    }
}

當某個 action 定義了參數,且在控制器類聲明中使用 Param 注解的時候,那么控制器會利用反射機制,根據 action 方法定義的參數名,去自動獲取取對應的參數。

Param 注解附加的字段

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

from

例如在以下注解中:

use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\Attributes\Param;
use EasySwoole\HttpAnnotation\Enum\ParamFrom;
use EasySwoole\HttpAnnotation\Validator\Integer;
use EasySwoole\HttpAnnotation\Validator\MaxLength;
use EasySwoole\HttpAnnotation\Validator\Required;

#[Param(
    name: "name",
    from: [ParamFrom::GET, ParamFrom::POST],
    validate: [
        new Required(),
        new MaxLength(25),
    ]
)]
#[Param(
    name: "age",
    from: [ParamFrom::POST],
    validate: [
        new Integer(),
    ]
)]
class Profile extends AnnotationController
{

}

則規定了 name 字段允許的取參順序為:GET => POST,而 age 參數就僅僅允許為 POST 傳參。目前 from 的允許值可查看枚舉類 \EasySwoole\HttpAnnotation\Enum\ParamFrom。在不規定 from 字段時,默認的 from 值為 [ParamFrom::GET, ParamFrom::POST]。具體實現可在 \EasySwoole\HttpAnnotation\Attributes\ParamparsedValue 方法中查看。

validate

對請求中傳入的參數設置驗證規則,并進行驗證,驗證失敗則拋出異常 \EasySwoole\HttpAnnotation\Exception\ValidateFail

value

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

description

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

type

例如以下注解中:

use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\Attributes\Param;
use EasySwoole\HttpAnnotation\Enum\ParamType;

#[Param(
    name: "age",
    type: ParamType::INT,
)]
class Profile extends AnnotationController
{
    public function echoAge($age)
    {
        var_dump('the is age');
        var_dump($age);
        $this->response()->write("the age is {$age}");
    }
}

通過 action 方法自動傳參得到的參數時,會對 age 這個參數進行 intval() 處理。type 字段可選值可查看枚舉類 \EasySwoole\HttpAnnotation\Enum\ParamType,具體處理原理可在 \EasySwoole\HttpAnnotation\Attributes\Param 類的 parsedValue 方法中查看。

subObject

該字段用于對當前參數為字典類型時,對其子屬性進行限制約束。如:

use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\HttpAnnotation\Attributes\Description;
use EasySwoole\HttpAnnotation\Attributes\Param;
use EasySwoole\HttpAnnotation\Enum\ParamFrom;
use EasySwoole\HttpAnnotation\Validator\Required;

#[Param(
    name: 'result',
    from: ParamFrom::JSON,
    validate: [
        new Required(),
    ],
    description: new Description('result'),
    subObject: [
        new Param(
            name: "userName",
            from: ParamFrom::JSON,
            validate: [
                new Required()
            ]
       )
    ]
)]
class Api extends AnnotationController
{

}

上述示例要求客戶端傳參時,必傳參數 result 對象中必須包含子屬性 userName

ignoreAction

該字段用于聲明需要對當前控制類的哪些 action 不進行注入,或者不做參數限制約束。

ApiGroup 注解

該注解用于聲明在控制器類的聲明中,用于注解文檔的生成。

use EasySwoole\HttpAnnotation\Attributes\ApiGroup;
use EasySwoole\HttpAnnotation\Attributes\Description;
use EasySwoole\HttpAnnotation\AnnotationController;

#[ApiGroup(
    groupName: "Api",
    description: new Description(
        desc: EASYSWOOLE_ROOT . "/res/description.md"
    ),
)]
class ApiBase extends Base
{

}

groupName

該字段用于給接口分組,它會自動把相同分組的接口統一在同一個分類下,方便開發者查看接口文檔。

description

該字段用于說明接口文檔存放的位置及接口文檔生成格式。

主站蜘蛛池模板: 图观 - 数字孪生 应用开发引擎 | 三维可视化 | 数海经纬官方网站 - 声学智能领域先行者 - 数海经纬(深圳)信息技术有限公司 | 宿迁市华泰交通设施有限公司,上海第四代路名牌,天津仿罗马柱路名牌,标准路名牌,路名牌灯箱,公交站台,户外广告灯箱, 交通标志牌,社区阅报栏 | 世界酒店网|世界酒店论坛|世界酒店联盟大会 | 搅拌器「厂家直销」-淄博亿贝化工设备有限公司 | 双合金螺杆|注塑机螺杆|挤出机螺杆|双合金料管—东莞市精耐螺杆机械有限公司 | 青州市泰航机械设备有限公司 | 智能仓储货架厂家 - 汇峰仓储 | 矿用三环链|锻打/焊接三环链|矿车万能环|三环链销子-济宁卓力工矿设备有限公司 | 液压升降机_导轨式电动液压升降平台_别墅电梯生产厂家-海南重康升降机 | 鲁氏罗茨风机-三叶罗茨鼓风机厂家-沉水式鼓风机-[瑞柘环保] | 磐林投资-大宗林产品现货电子交易|林业碳汇|林权交易|农林产品投资 | 粮食加工设备_玉米_大米_面粉_燕麦_豆类杂粮加工设备-华豫万通 | 铝合金线棒生产厂家-提供第三代精益管,防静电工作台定制与批发-宁波杰艾逖仓储设备有限公司 | 亚洲一区日韩一区欧美一区a,中文字幕乱妇无码AV在线,欧美日韩免费在线观看,国产精品一区二区三区免费,日韩精品免费一线在线观看,日韩一本在线,国产呦精品一区二区三区下载,国产日韩精品一区二区在线观看,欧美日韩高清一区二区三区,日韩在线免费观看视频,欧美日韩一区在线观看 | 真空干燥箱厂家-热风循环烘箱生产厂家-鼓风烘干箱价格-南京火燥机械科技有限公司 | 营销型网站建设-企业高端网站设计制作公司-16年建站品牌 | 无机纤维抗菌板-A级不燃纤维板-石英纤维板厂家-医疗抗菌板-浙江德耐姆 | 盘扣租赁|盘扣架租赁|盘扣脚手架|盘扣脚手架租赁|盘扣式脚手架|盘扣式脚手架租赁-北京亚欧盟盘扣租赁有限公司 | 诸城市瑞特机械有限公司_洗筐机,周转箱,托盘清洗机,风淋室 | 起名字典|宝宝新生儿男孩女孩起名免费网-诗经周易生辰八字取名字大全 | 食用油灌装机-油类食用油灌装设备-液体灌装机_青州市惠联灌装机械 | 昆明塑料包装袋|云南塑料包装袋|昆明塑料袋厂家|云南茶叶大米蔬菜种子食品包装袋就来阮门包装有限公司 | 硬度计,里氏硬度计,布氏硬度计,高强螺栓检测仪,平板导热仪,专业无损检测仪器商-北京时代新天测控技术有限公司-北京时代新天测控技术有限公司 | 纠偏系统厂家-迈欣机械 | 泰安led显示屏-泰安户外裸眼3D显示屏-扩声系统-舞台灯光机械-电子屏-肥城宁阳新泰东平-泰安市奇美特电子有限公司 | 收银系统_收银机_pos收款机_门店管理系统-客如云 | 内蒙古浩泽环保集团股份公司,内蒙古环保设备,内蒙古污水处理,内蒙古在线监测 | 企业资质代办-代理全国工商注册公司_公司转让_增值电信业务许可证新办续期-大通天成科技[gw] | 中国水泥协会-官方网站| 柱状_椰壳_蜂窝_果壳_粉状活性炭_活性炭厂家 - 銮桦净化 | 上海vi设计公司_logo设计_包装设计_品牌定位策划公司-焕识品牌设计 - | 锦州龙威机械有限公司官网 ,锦州医药包装机,包装机,锦州包装机械,小袋颗粒装盒生产线,颗粒装盒生产线,软双铝装盒线,伺服颗粒 | 手持电能质量测量仪-TD-1168多功能高空接线钳-上海妙定电气有限公司 | 襄阳燃烧器厂家-低氮燃烧器价格-河北五通道燃烧器就找襄阳市胜合燃力设备有限公司一站式服务 | 混凝土布料机,隧道布料机,衬砌台车布料装置 - 河北聚力智能装备有限公司 | 莱湾科技-智能会议室|多功能|多媒体|音视频|无纸化|远程视频会议室运维 | 家用油烟净化机_商用餐饮油烟净化器_工业油雾废气处理设备_深圳市宝篮环保 | 营销型网站建设-企业高端网站设计制作公司-16年建站品牌 | 真空机器人维修_晶圆机械手保养_半导体机械臂维修_面板机器人保养_AMHS改造-广州市广科智能技术有限公司 | 佳龙食品集团|高端辣条领导品牌 佳龙食品集团|高端辣条领导品牌 |