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

控制器類注解

控制器類注解指的是可以在控制器類上聲明使用的注解標(biāo)簽,包括 ParamApiGroup 兩個(gè)注解標(biāo)簽。用于實(shí)現(xiàn)對(duì)控制器類中成員方法的參數(shù)的約束邏輯判斷及注解文檔的生成。

Param 注解

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

<?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}");
    }
}

那么則規(guī)定了 Profile 這個(gè)控制器類除了 info 這個(gè) action 不需要 signature 參數(shù),其他 action 均需要 signature 參數(shù),且校驗(yàn)規(guī)則分別為 required 即要求必填。

參數(shù)的接收

自動(dòng)傳參

<?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}");
    }
}

當(dāng)某個(gè) action 定義了參數(shù),且在控制器類聲明中使用 Param 注解的時(shí)候,那么控制器會(huì)利用反射機(jī)制,根據(jù) action 方法定義的參數(shù)名,去自動(dòng)獲取取對(duì)應(yīng)的參數(shù)。

Param 注解附加的字段

Param 注解除了 name 字段為必填項(xiàng),還有以下幾個(gè)輔助字段。

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
{

}

則規(guī)定了 name 字段允許的取參順序?yàn)椋篏ET => POST,而 age 參數(shù)就僅僅允許為 POST 傳參。目前 from 的允許值可查看枚舉類 \EasySwoole\HttpAnnotation\Enum\ParamFrom。在不規(guī)定 from 字段時(shí),默認(rèn)的 from 值為 [ParamFrom::GET, ParamFrom::POST]。具體實(shí)現(xiàn)可在 \EasySwoole\HttpAnnotation\Attributes\ParamparsedValue 方法中查看。

validate

對(duì)請(qǐng)求中傳入的參數(shù)設(shè)置驗(yàn)證規(guī)則,并進(jìn)行驗(yàn)證,驗(yàn)證失敗則拋出異常 \EasySwoole\HttpAnnotation\Exception\ValidateFail

value

在客戶端沒有傳遞該參數(shù)的值時(shí),可以用該字段進(jìn)行默認(rèn)值的定義。

description

該字段主要用于自動(dòng)生成文檔時(shí),參數(shù)的描述說(shuō)明。

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}");
    }
}

通過(guò) action 方法自動(dòng)傳參得到的參數(shù)時(shí),會(huì)對(duì) age 這個(gè)參數(shù)進(jìn)行 intval() 處理。type 字段可選值可查看枚舉類 \EasySwoole\HttpAnnotation\Enum\ParamType,具體處理原理可在 \EasySwoole\HttpAnnotation\Attributes\Param 類的 parsedValue 方法中查看。

subObject

該字段用于對(duì)當(dāng)前參數(shù)為字典類型時(shí),對(duì)其子屬性進(jìn)行限制約束。如:

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
{

}

上述示例要求客戶端傳參時(shí),必傳參數(shù) result 對(duì)象中必須包含子屬性 userName

ignoreAction

該字段用于聲明需要對(duì)當(dāng)前控制類的哪些 action 不進(jìn)行注入,或者不做參數(shù)限制約束。

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

該字段用于給接口分組,它會(huì)自動(dòng)把相同分組的接口統(tǒng)一在同一個(gè)分類下,方便開發(fā)者查看接口文檔。

description

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

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    欧美日韩视频在线一区二区观看视频| 久久久久国内| 精品一区二区三区国产| 亚洲伦伦在线| 亚洲精品人成| 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲欧美一区在线| 国产精品一区二区三区观看| 99国内精品| 午夜精品999| 天天综合狠狠精品| 久久精品人成| av色综合网| 美女精品网站| 91久久国产自产拍夜夜嗨| 天堂资源在线亚洲资源| 久久久99国产精品免费| 91国产在线播放| 销魂美女一区二区三区视频在线| 激情综合激情| 午夜精品影院| 中文网丁香综合网| 日韩精品资源| 欧美日韩精品久久| 精品国产乱码久久久久久久软件| 久久人人97超碰国产公开结果| 亚洲麻豆视频| 亚洲精品看片| 夜夜嗨一区二区三区| 欧美日韩喷水| 国产主播精品| 国产精品久久7| 欧美另类视频| 国产综合欧美| 中文字幕日韩一区二区三区不卡| 日韩欧美三级一区二区| 日本视频一区二区不卡| 好吊色欧美一区二区三区四区 | 正在播放精油久久| 亚洲色图自拍| 欧美精品一区二区三区在线看午夜 | 亚洲视频精品| 亚洲电影av| 99精品福利视频| 国产精品久久久久久久久婷婷 | 亚洲欧洲另类精品久久综合| 日本一区二区免费看| 日韩免费电影一区二区| 色播亚洲视频在线观看| 亚洲视频sss| 欧美三级午夜理伦三级中文幕| 合欧美一区二区三区| 91久久极品少妇xxxxⅹ软件| 国产美女诱惑一区二区| 2014亚洲精品| 国产精品久久久久久免费观看| 精品国产乱码久久久久久久软件| 久久综合色一本| 亚洲激情啪啪| 136国产福利精品导航网址| 国产亚洲欧美一区二区 | 欧美国内亚洲| 国产女主播一区二区三区| 北条麻妃高清一区| 日本高清不卡三区| 欧美福利专区| 国产精品三上| 狠狠色综合欧美激情| 亚洲高清视频一区| 一本色道久久综合亚洲精品不 | 亚洲一级一区| 久久精品官网| 欧美日韩国产免费一区二区三区 | 国产一区福利视频| 亚洲.欧美.日本.国产综合在线 | 激情伦成人综合小说| 一区二区精品在线| 精品动漫3d一区二区三区免费版| 美女黄色成人网| 日产国产精品精品a∨| 黄色在线一区| 国产精品久久一区二区三区| 神马欧美一区二区| 亚洲人成免费| 久久99精品久久久久子伦| 欧美aⅴ99久久黑人专区| 亚洲免费一区二区| 色噜噜狠狠色综合网| 亚洲欧洲日本mm| 久久久久se| 一区二区冒白浆视频| 欧美精品123| 在线视频观看日韩| 国产精品区一区二区三在线播放 | 久久99精品久久久久子伦| 欧美视频二区| 国产免费一区二区| 国产一区自拍视频| 久久久一本精品99久久精品| 亚洲激情偷拍| 日韩中文一区二区三区| 麻豆精品视频| 欧美日韩国产探花| 久久精品日韩精品| 国产一区白浆| 欧美成人综合一区| 精品一区二区日本| 国产美女在线精品免费观看| 亚洲视频sss| 激情一区二区三区| 国产伦精品一区二区三区视频黑人 | 99国产精品久久久久久久成人热| 欧美日韩精品一区| 噜噜噜噜噜久久久久久91| 欧美三日本三级少妇三99| 免费看污久久久| 久久综合一区二区三区| 亚洲一级网站| 亚洲欧美综合一区| 久久久一本精品99久久精品| 久久婷婷一区| 亚洲精品在线二区| 你懂的网址国产 欧美| 欧美男人的天堂| av色综合网| 六月婷婷一区| 亚洲中字在线| 亚洲日韩成人| 韩国在线一区| 中文字幕不卡每日更新1区2区| 麻豆视频成人| 国产精品三区www17con| 国产一区二区三区久久| 国产精品成人一区二区网站软件| 神马欧美一区二区| 欧美亚洲国产免费| 九9re精品视频在线观看re6 | 亚洲天堂电影网| 日本一区不卡| 欧美一区二区视频在线| 久久精品国产综合精品| 国产伦精品一区二区三区免| 99久久精品免费看国产四区| 久久国产欧美| 久久福利影视| 久久精品123| 3d蒂法精品啪啪一区二区免费| 国产伦精品一区二区三区| 国产精品美女| 国产精品日韩久久久| 亚洲一区免费看| 欧美一级视频| 老**午夜毛片一区二区三区| 久久人人97超碰人人澡爱香蕉| 久久久久一区二区| 99久久国产免费免费| 国产精品免费观看高清| 精品在线视频一区二区三区| 麻豆av福利av久久av| 欧美凹凸一区二区三区视频| 精品乱码一区| 日韩精品久久久| 中文字幕一区二区三区四区五区| 中文字幕中文字幕一区三区| 欧美日韩在线精品| 91久久国产自产拍夜夜嗨| 国产精品久久波多野结衣| 久久综合狠狠综合久久综青草| 成人免费视频观看视频| 精品1区2区| 视频在线99re| 好吊日精品视频| 中国成人亚色综合网站| 久久婷婷麻豆| 欧美精品与人动性物交免费看| 色就是色欧美| 欧美日韩一区综合| 亚洲欧美日韩在线综合| 成人黄色片视频网站| 欧洲成人一区二区| 韩国亚洲精品| 久久亚洲一区| 欧美亚洲免费高清在线观看| 欧美+亚洲+精品+三区| 亚洲乱码视频| 国产精品免费一区二区三区观看 | 久久婷婷激情| 欧美一级日本a级v片| 欧美高清一区二区| 久久国产精品久久w女人spa| 另类视频在线观看+1080p| 你懂的亚洲视频| 久久大逼视频| 日韩免费三级| 国产视频一区欧美| 蜜桃视频在线观看91| 欧美日韩高清免费| 99se婷婷在线视频观看| 一本色道婷婷久久欧美| 国产精品婷婷|