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
其他信息
- 授权协议: MIT
- 更新时间: 2023-05-25