亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

控制器類注解

控制器類注解指的是可以在控制器類上聲明使用的注解標簽,包括 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

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

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    正在播放一区| 亚洲黄色视屏| 免费看国产精品一二区视频| 久久av二区| 艳色歌舞团一区二区三区| 中文字幕色一区二区| 亚洲午夜精品一区二区| 亚洲男女自偷自拍| 国产精品日韩一区二区三区| 欧美国产综合视频| 在线成人欧美| 精品欧美一区二区在线观看视频| 一区二区三区精品国产| 国产美女一区| 亚洲精品在线视频观看| 亚洲日本欧美在线| 久久草.com| 中文精品视频| 欧洲精品亚洲精品| 亚洲二区三区四区| 久久精品人人做人人爽电影| 欧美在线国产| 99精彩视频在线观看免费| 午夜老司机精品| 久久久99国产精品免费| 在线国产精品网| 99国产高清| 亚洲国产一区二区三区高清| 欧美13一14另类| 国产精品一区在线播放| 亚洲精品影院| 国产精品美女黄网| 一区在线视频观看| 日韩动漫在线观看| 91亚洲精品丁香在线观看| 一区二区三区偷拍| 国产欧美综合精品一区二区| 99精品欧美一区二区三区| 日本精品一区二区| 99精彩视频| 中文精品一区二区三区| 性高潮久久久久久久久| 久久蜜桃精品| 亚洲欧洲一区二区天堂久久| 色涩成人影视在线播放| 国产成人精品日本亚洲11| 亚洲高清在线| 一区二区免费在线视频| 蜜桃成人在线| 国产在线精品日韩| 国产精品久久久久9999高清| 黑人一区二区三区四区五区| 日韩欧美激情一区二区| 欧美另类网站| 精品视频免费观看| 国产精品18毛片一区二区| 国产精品视频福利| av不卡在线看| 亚洲精品欧美| 国产欧美在线| 亚洲视频播放| 国产偷国产偷亚洲高清97cao| 国产精品豆花视频| 午夜视频久久久| 欧美日韩国产高清| 欧美一区二区三区四区在线观看地址| 日韩av高清在线播放| 免费在线观看91| 日本一区二区三区视频免费看 | 国产精品日本| 亚洲一区二区在线看| 国产日韩欧美二区| 性欧美videos另类喷潮| 亚洲一区日本| 老司机精品导航| 成人欧美一区二区三区视频xxx| 午夜一级在线看亚洲| 亚洲欧美高清| 成人动漫视频在线观看完整版| 都市激情久久久久久久久久久| 99在线看视频| 麻豆一区区三区四区产品精品蜜桃| 欧美精品人人做人人爱视频| 欧美国产一区二区在线| 亚洲欧美丝袜| 在线免费高清一区二区三区| 在线一区亚洲| 成人激情直播| 欧美日韩在线播放一区二区| 亚洲成人av动漫| 国产一在线精品一区在线观看| 亚洲精选国产| a级国产乱理论片在线观看99| 国产精品一区而去| 亚洲成人18| 亚洲视频播放| 久久精品国产理论片免费| 日本精品二区| 亚洲黑丝一区二区| 91丝袜脚交足在线播放| 欧美在线日韩精品| 亚洲激精日韩激精欧美精品| 97人人香蕉| 亚洲精品一区二区三区四区五区| 激情视频一区| 国产一区二区三区高清| 自拍亚洲欧美老师丝袜| 先锋亚洲精品| 亚洲v欧美v另类v综合v日韩v| 亚洲欧洲久久| 欧美激情论坛| 亚洲青涩在线| 欧美日韩国产精品一卡| 亚洲国产日本| 免费av一区二区三区| 亚洲二区在线| 欧美重口乱码一区二区| 中文日韩在线| 欧美一二三四五区| 国产日韩精品一区观看| 欧美精品尤物在线| 亚洲综合好骚| 亚洲蜜桃在线| 91手机在线播放| 午夜精品久久久久99热蜜桃导演 | 中文字幕剧情在线观看一区| 亚洲欧美日本国产专区一区| 亚洲电影网站| 国产传媒一区二区三区| 在线欧美不卡| 天堂一区二区三区| 91嫩草在线| 亚洲欧洲视频| 正在播放国产精品| 免费看国产精品一二区视频| 国产精品亚洲综合| 欧美精品日本| 欧美日韩综合另类| av免费观看久久| 影音先锋亚洲一区| 在线不卡视频一区二区| 精品网站在线看| 97久久夜色精品国产九色 | 欧美在线二区| 精品一区二区三区自拍图片区 | 日韩jizzz| 国产精品区一区二区三在线播放| 亚洲精品乱码久久久久久蜜桃麻豆 | 狠狠色伊人亚洲综合网站色| 欧美精品二区三区四区免费看视频| 亚洲一区二区三区四区五区午夜| 欧美fxxxxxx另类| 日韩精品久久一区| 久久精品日产第一区二区三区乱码 | 久久久久久9| 一区二区三区四区五区精品| 久久涩涩网站| 久久精品国产第一区二区三区最新章节 | 久久精品盗摄| 亚洲图片在线| 中文字幕一区二区三区有限公司 | 国内精品国语自产拍在线观看| 欧美成熟毛茸茸复古| 国产精品一区二区在线观看| 超碰97在线人人| 高清不卡日本v二区在线| 久久成人精品| 久久精品女人的天堂av| 国产精品资源| 国产农村妇女精品一二区 | 电影午夜精品一区二区三区| 久久不射中文字幕| 99久久无色码| 韩日午夜在线资源一区二区| 国产精品久久久久久久久久直播 | 日本免费高清一区二区| 日本一区高清在线视频| 日本一区二区三不卡| 亚洲国产精品毛片| 一区二区视频在线播放| 欧美尤物一区| 韩国一区二区三区在线观看| 一本久久综合| yy111111少妇影院日韩夜片 | 亚洲三级免费| 麻豆成人在线| 国产亚洲精品久久飘花| 欧美xxxx黑人又粗又长精品| 亚洲精品一区二区三区四区五区| 欧美精品一区二区视频| 影音先锋中文字幕一区| 蜜桃av综合| 免费看成人午夜电影| 中文字幕一区二区三区四区五区| 亚洲成人自拍视频| 久久一日本道色综合久久| 快播亚洲色图| 狠狠色丁香久久综合频道| 国产精品老牛| 久久综合九色欧美狠狠|