午夜免费_欧美一级免费看_欧美日韩一区二区视频在线观看_午夜视频在线_日本特黄a级高清免费大片_成年人黄色小视频

控制器类注解

控制器类注解指的是可以在控制器类上声明使用的注解标签,包括 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

该字段用于说明接口文档存放的位置及接口文档生成格式。

主站蜘蛛池模板: 国产97色在线 | 国产 | 91视频在线网站 | 99精品久久久国产一区二区三 | 夜夜草影院 | 亚洲国产成人久久综合一区,久久久国产99 | 一区二区三区久久 | 亚洲免费国产 | 久久精品国产精品 | 亚洲一区二区高潮无套美女 | 亚洲一区二区三区四区 | 国产高清在线观看 | 91视频污网站 | 人人干日日 | 亚洲美女自拍视频 | 91视频免费在线观看 | 亚洲美女在线一区 | 久久久久久久久久久亚洲 | 久久久精品国产一区二区三区 | 亚洲在线观看视频 | 99国产一区 | 91精品大片| 国产综合精品一区二区三区 | 国产日本视频 | 亚洲美女视频一区二区 | 国产精品久久网站 | 久久精品国产一区二区三 | 国产亚洲三区 | 国产视频一区二区三区在线播放 | 一本久道竹内纱里奈中文字幕 | 51久久成人国产精品麻豆 | 亚洲专区一区虐另类调教 | 久久久精品一区二区三区 | 亚洲免费在线播放 | 91精品久久久久久久久中文字幕 | 偷拍激情视频一区二区三区 | 99久久精品久久 | 亚洲欧美人色综合婷婷久久 | 懂色一区 | 国产一区二区三区成人久久片老牛 | 国产日本欧美一区二区三区 | 天天操夜夜拍 |