初始化本地仓库
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugin\example\app\controller\test;
|
||||
|
||||
|
||||
use madong\swagger\annotation\response\DataResponse;
|
||||
use madong\swagger\annotation\response\ListResponse;
|
||||
use madong\swagger\annotation\response\PageResponse;
|
||||
use madong\swagger\attribute\Permission;
|
||||
use OpenApi\Attributes as OA;
|
||||
use plugin\example\app\schema\response\AdminSchema;
|
||||
use plugin\example\app\schema\response\TestResponseDTO;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
|
||||
class InstanceResponseController
|
||||
{
|
||||
/**
|
||||
* DataResponse - 对象实例模式
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: '/test/instance-data',
|
||||
description: '使用 DataResponse 注解并传入对象实例',
|
||||
summary: 'DataResponse - 对象实例模式',
|
||||
tags: ['Instance响应测试']
|
||||
)]
|
||||
#[DataResponse(
|
||||
schema: new TestResponseDTO(),
|
||||
description: '成功获取测试DTO数据'
|
||||
)]
|
||||
#[Permission(code: 'test:schema:data', operation: 'OR', description: 'DataResponse 实例模式测试权限')]
|
||||
public function testDataInstance(Request $request): Response
|
||||
{
|
||||
return json([
|
||||
'code' => 0,
|
||||
'message' => 'success',
|
||||
'data' => [
|
||||
'id' => '1',
|
||||
'username' => 'testuser1',
|
||||
'email' => 'test1@example.com',
|
||||
'status' => 1,
|
||||
'created_at' => '2024-01-01T00:00:00+08:00',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* PageResponse - 对象实例模式
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: '/test/instance-page',
|
||||
description: '使用 PageResponse 注解并传入对象实例',
|
||||
summary: 'PageResponse - 对象实例模式',
|
||||
tags: ['Instance响应测试']
|
||||
)]
|
||||
#[PageResponse(
|
||||
schema: new AdminSchema(),
|
||||
description: '成功获取管理员分页列表',
|
||||
totalExample: 100,
|
||||
pageExample: 1,
|
||||
limitExample: 10
|
||||
)]
|
||||
#[Permission(code: 'test:schema:page', operation: 'OR', description: 'PageResponse 实例模式测试权限')]
|
||||
public function testPageInstance(Request $request): Response
|
||||
{
|
||||
return json([
|
||||
'code' => 0,
|
||||
'message' => 'success',
|
||||
'data' => [
|
||||
'total' => 100,
|
||||
'page' => 1,
|
||||
'limit' => 10,
|
||||
'items' => [
|
||||
[
|
||||
'id' => '1',
|
||||
'user_name' => 'admin1',
|
||||
'real_name' => '管理员1',
|
||||
'mobile_phone'=> '18888888881',
|
||||
'email' => 'admin1@example.com',
|
||||
'status' => 1,
|
||||
'dept_id' => 1,
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* ListResponse - 对象实例模式
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: '/test/instance-list',
|
||||
description: '使用 ListResponse 注解并传入对象实例',
|
||||
summary: 'ListResponse - 对象实例模式',
|
||||
tags: ['Instance响应测试']
|
||||
)]
|
||||
#[ListResponse(
|
||||
schema: new AdminSchema(),
|
||||
description: '成功获取管理员列表'
|
||||
)]
|
||||
#[Permission(code: 'test:schema:list', operation: 'OR', description: 'ListResponse 实例模式测试权限')]
|
||||
public function testListInstance(Request $request): Response
|
||||
{
|
||||
return json([
|
||||
'code' => 0,
|
||||
'message' => 'success',
|
||||
'data' => [
|
||||
[
|
||||
'id' => '1',
|
||||
'user_name' => 'admin1',
|
||||
'real_name' => '管理员1',
|
||||
'email' => 'admin1@example.com',
|
||||
],
|
||||
[
|
||||
'id' => '2',
|
||||
'user_name' => 'admin2',
|
||||
'real_name' => '管理员2',
|
||||
'email' => 'admin2@example.com',
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 混合使用:对象实例 + 示例
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: '/test/instance-with-example',
|
||||
description: '使用对象实例定义Schema,同时提供自定义示例',
|
||||
summary: '混合使用:对象实例 + 示例',
|
||||
tags: ['Instance响应测试']
|
||||
)]
|
||||
#[PageResponse(
|
||||
schema: new AdminSchema(),
|
||||
example: [
|
||||
[
|
||||
'id' => '999',
|
||||
'user_name' => 'custom_admin',
|
||||
'real_name' => '自定义管理员',
|
||||
'mobile_phone'=> '13999999999',
|
||||
'email' => 'custom@example.com',
|
||||
'status' => 1,
|
||||
'dept_id' => 99,
|
||||
]
|
||||
],
|
||||
description: '成功获取分页列表(带自定义示例)',
|
||||
totalExample: 50,
|
||||
pageExample: 2,
|
||||
limitExample: 20
|
||||
)]
|
||||
#[Permission(code: 'test:schema:mixed', operation: 'OR', description: '混合模式测试权限')]
|
||||
public function testMixed(Request $request): Response
|
||||
{
|
||||
return json([
|
||||
'code' => 0,
|
||||
'message' => 'success',
|
||||
'data' => [
|
||||
'total' => 50,
|
||||
'page' => 2,
|
||||
'limit' => 20,
|
||||
'items' => [
|
||||
[
|
||||
'id' => '21',
|
||||
'user_name' => 'admin21',
|
||||
'real_name' => '管理员21',
|
||||
'email' => 'admin21@example.com',
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
请求DTO
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
*+------------------
|
||||
* madong
|
||||
*+------------------
|
||||
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
||||
*+------------------
|
||||
* Author: Mr. April (405784684@qq.com)
|
||||
*+------------------
|
||||
* Official Website: https://madong.tech
|
||||
*/
|
||||
|
||||
namespace plugin\example\app\schema\response;
|
||||
|
||||
use OpenApi\Attributes as OA;
|
||||
use WebmanTech\DTO\BaseResponseDTO;
|
||||
|
||||
#[OA\Schema(
|
||||
title: '管理员详情响应模型',
|
||||
description: '管理员详情接口的返回数据结构'
|
||||
)]
|
||||
class AdminSchema extends BaseResponseDTO
|
||||
{
|
||||
#[OA\Property(
|
||||
property: 'id',
|
||||
description: '管理员ID',
|
||||
type: 'string',
|
||||
example: '1'
|
||||
)]
|
||||
public string $id;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'user_name',
|
||||
description: '用户名',
|
||||
type: 'string',
|
||||
example: 'admin'
|
||||
)]
|
||||
public string $user_name;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'real_name',
|
||||
description: '真实姓名',
|
||||
type: 'string',
|
||||
example: '管理员'
|
||||
)]
|
||||
public string $real_name;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'mobile_phone',
|
||||
description: '手机号码',
|
||||
type: 'string',
|
||||
example: '18888888888'
|
||||
)]
|
||||
public string $mobile_phone;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'email',
|
||||
description: '邮箱',
|
||||
type: 'string',
|
||||
example: 'admin@example.com'
|
||||
)]
|
||||
public string $email;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'status',
|
||||
description: '状态(0:禁用,1:启用)',
|
||||
type: 'integer',
|
||||
enum: [0, 1],
|
||||
example: 1,
|
||||
)]
|
||||
public int $status;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'dept_id',
|
||||
description: '部门ID',
|
||||
type: 'integer',
|
||||
example: 1
|
||||
)]
|
||||
public int $dept_id;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'avatar',
|
||||
description: '头像',
|
||||
type: 'string',
|
||||
example: '/upload/avatar.jpg'
|
||||
)]
|
||||
public string $avatar;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'is_super',
|
||||
description: '是否超级管理员(0:否,1:是)',
|
||||
type: 'integer',
|
||||
example: 1,
|
||||
enum: [0, 1]
|
||||
)]
|
||||
public int $is_super;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'is_tenant_admin',
|
||||
description: '是否租户管理员(0:否,1:是)',
|
||||
type: 'integer',
|
||||
example: 1,
|
||||
enum: [0, 1]
|
||||
)]
|
||||
public int $is_tenant_admin;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'created_at',
|
||||
description: '创建时间',
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
example: '2025-10-10T16:28:51+08:00'
|
||||
)]
|
||||
public string $created_at;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'updated_at',
|
||||
description: '更新时间',
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
example: '2025-10-10T16:28:51+08:00'
|
||||
)]
|
||||
public string $updated_at;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugin\example\app\schema\response;
|
||||
|
||||
use OpenApi\Attributes as OA;
|
||||
|
||||
#[OA\Schema(
|
||||
title: '部门树响应模型',
|
||||
description: '部门树形结构,支持无限层级'
|
||||
)]
|
||||
class DeptSchema
|
||||
{
|
||||
#[OA\Property(description: '部门ID', example: 1)]
|
||||
public int $id;
|
||||
|
||||
#[OA\Property(description: '部门名称', example: '技术部')]
|
||||
public string $name;
|
||||
|
||||
#[OA\Property(
|
||||
description: '子部门列表(树形结构)',
|
||||
type: 'array',
|
||||
items: new OA\Items(
|
||||
ref: '#/components/schemas/DeptSchema'
|
||||
)
|
||||
)]
|
||||
public array $children;
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
*+------------------
|
||||
* madong
|
||||
*+------------------
|
||||
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
||||
*+------------------
|
||||
* Author: Mr. April (405784684@qq.com)
|
||||
*+------------------
|
||||
* Official Website: http://www.madong.tech
|
||||
*/
|
||||
|
||||
namespace plugin\example\app\schema\response;
|
||||
|
||||
use madong\swagger\schema\BaseResponseDTO;
|
||||
use OpenApi\Attributes as OA;
|
||||
|
||||
/**
|
||||
* 测试响应 DTO
|
||||
*
|
||||
* 继承 BaseResponseDTO 可以通过 x 参数传递 schema
|
||||
* 使用方式:x: [SchemaConstants::X_SCHEMA_RESPONSE => TestResponseDTO::class]
|
||||
*/
|
||||
#[OA\Schema(
|
||||
title: '测试响应DTO',
|
||||
description: '测试响应DTO的数据结构'
|
||||
)]
|
||||
class TestResponseDTO extends BaseResponseDTO
|
||||
{
|
||||
#[OA\Property(
|
||||
property: 'id',
|
||||
description: 'ID',
|
||||
type: 'string',
|
||||
example: '1'
|
||||
)]
|
||||
public string $id;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'username',
|
||||
description: '用户名',
|
||||
type: 'string',
|
||||
example: 'admin'
|
||||
)]
|
||||
public string $username;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'email',
|
||||
description: '邮箱',
|
||||
type: 'string',
|
||||
example: 'admin@example.com'
|
||||
)]
|
||||
public string $email;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'status',
|
||||
description: '状态',
|
||||
type: 'integer',
|
||||
example: 1
|
||||
)]
|
||||
public int $status;
|
||||
|
||||
#[OA\Property(
|
||||
property: 'created_at',
|
||||
description: '创建时间',
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
example: '2024-01-01T00:00:00+08:00'
|
||||
)]
|
||||
public string $created_at;
|
||||
}
|
||||
Reference in New Issue
Block a user