亚洲精品成人_精品成人一区_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

在客戶端沒(méi)有傳遞該參數(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è)分類下,方便開(kāi)發(fā)者查看接口文檔。

description

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

主站蜘蛛池模板: 日本午夜色 | 嫩草av| 成人免费播放视频 | 久久婷婷一区二区 | 日本理论视频 | 日韩在线高清 | 欧美视频一二 | 狠狠婷婷综合久久久久久妖精 | 久久免费视频一区二区 | 在线看亚洲 | 好吊操妞 | 亚欧洲精品视频在线观看 | 国产欧美精品区一区二区三区 | 一区在线视频 | 日本精品视频免费观看 | 国产一级视频在线 | 狠狠干一区 | 综合好色 | 日韩五码 | 一级观看免费完整版视频 | 天堂资源最新在线 | 日韩亚洲 | 久草在线免费福利资源站 | 美女乱淫aaaa高清视频 | 亚洲欧美精品一区二区三区 | 欧美精品小视频 | 日韩蜜桃| 国产午夜精品久久久久久久蜜臀 | 免费看一级黄色毛片 | 毛片视频网 | 欧美高清性xxxx | 日韩成人av一区二区 | 在线免费观看黄视频 | 日本欧美久久久 | 久久综合久 | 欧美精品1区2区 | 91视色| 日韩黄色大全 | 欧美日韩三级在线观看 | 国产一级一片免费播放放a 国产一级一区二区 | 成年免费看 |