中文在线一区二区_欧美在线综合_久久久久久综合_欧美一区二区三区视频_国产免费看_国产福利精品一区

控制器類注解

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

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

主站蜘蛛池模板: 日韩成人av电影在线观看 | 国产精品99久久久久久久vr | 精品久久久久久久久久久久久久 | 一区二区三区在线 | 色www精品视频在线观看 | 日本中文字幕在线视频 | 亚洲乱码一区二区三区在线观看 | 亚洲性生活免费视频 | 永久91嫩草亚洲精品人人 | 精品国产不卡一区二区三区 | 午夜精品福利电影 | 日韩欧美在线一区二区 | 在线国产一级片 | 三级视频在线观看 | 国产综合在线视频 | 日韩精品久久久久久 | 亚洲精品日韩激情在线电影 | 国产日韩精品一区 | 日本不卡高字幕在线2019 | 久久综合久久久 | 日本视频免费高清一本18 | 亚洲大片免费观看 | 国产激情网 | 欧美一区二区三区在线观看 | 日韩欧美一区二区在线观看视频 | 成人精品视频免费 | 亚洲精品日本 | 天天干天天干天天干天天射 | 国产精品久久久久久久久 | 国产一区二 | 亚洲激情在线视频 | 一区二区三区中文 | 亚洲精品乱码久久久久久金桔影视 | 国产视频网 | 国产久| 伊人激情影院 | 精品视频久久久久 | 精品亚洲永久免费精品 | 偷拍一区二区三区四区 | 午夜久久久久 | 亚洲欧美激情精品一区二区 |