gchernikov/request-resolver-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

gchernikov/request-resolver-bundle

最新稳定版本:1.0.2

Composer 安装命令:

composer require gchernikov/request-resolver-bundle

包简介

Symfony bundle for constructing request dto's and resolving them as Controller arguments

README 文档

README

Symfony bundle for resolving Request Dto based on Openapi attributes

Installation

Install this package using composer

composer require gchernikov/request-resolver-bundle

Usage

Example 1. Hydrate Request Dto from GET parameters only

Request Dto class:

#[AsResolvableRequest]
class GetAllOrderRequest
{
    #[Date]
    public ?string $dateFrom = null;

    #[Date]
    #[GreaterThanOrEqual(propertyPath: 'dateFrom')]
    public ?string $dateTo = null;
}

Controller class:

#[Route(
    path: '/order',
    name: 'order:get_all',
    methods: [Request::METHOD_GET],
)]
#[OA\Tag('Order')]
#[OA\Get(
    operationId: 'order:get_all',
    description: 'List of all user\'s orders with filtering',
    summary: 'Orders history',
    parameters: [
        new OA\Parameter(
            name: 'dateFrom',
            description: 'Period date from',
            in: 'query',
            schema: new OA\Schema(type: 'date', nullable: true),
        ),
        new OA\Parameter(
            name: 'dateTo',
            description: 'Period date to',
            in: 'query',
            schema: new OA\Schema(type: 'date', nullable: true),
        )
    ],
    responses: [
        new App\Response\Ok(type: GetAllOrderResponse::class),
    ],
)]
#[App\Response\ValidationError]
#[App\Response\UnexpectedError]
class GetAllOrderController extends AbstractController
{
    public function __invoke(GetAllOrderRequest $request): Response
    {
        // Demo for showing request Dto
        dump($request);
        
        // Place some logic to handle your request in $this->operation
        $result = ($this->operation)($request);
        
        return $this->json($result);
    }
}

Example 2. Hydrate Request Dto from both GET parameters and POST data

Request Dto class:

#[AsResolvableRequest]
final class CreateOrderRequest
{
    #[NotBlank]
    #[GreaterThanOrEqual(1)]
    public int $quantity;
    
    #[NotBlank]
    public int $productId
}

Controller class:

#[Route(
    path: '/product/{productId}/order',
    name: 'order:create',
    methods: [Request::METHOD_POST],
)]
#[OA\Tag('Order')]
#[OA\Post(
    operationId: 'order:create',
    description: 'Create order for a certain product',
    summary: 'Creates order',
    requestBody: new RequestBody(
        required: true,
        content: new JsonContent(
            ref: new Model(type: CreateOrderRequest::class),
        ),
    ),
    parameters: [
        new OA\Parameter(
            name: 'productId',
            description: 'Id of product',
            in: 'path',
            schema: new OA\Schema(type: 'int', nullable: false),
            example: 123,
        ),
    ],
    responses: [
        new Created(type: CreateOrderResponse::class),
    ],
)]
class CreateOrderController extends AbstractController
{
    public function __invoke(CreateOrderRequest $request): Response
    {
        // Demo for showing request Dto
        dump($request);
        
        // Place some logic to handle your request in $this->operation
        $result = ($this->operation)($request);
        
        return $this->json($result);
    }
}

统计信息

  • 总下载量: 4.96k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-05-25