mkoprek / request-validation-bundle
3.0.1
2023-05-24 11:56 UTC
Requires
- php: >=8.0
- ext-json: *
- symfony/config: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/http-kernel: ^6.0
- symfony/validator: ^6.0
Requires (Dev)
- phpstan/phpstan: ^0.12.92
- phpunit/phpunit: ^9.5
README
这是一个用于简化请求处理的简单库。您可以使用它轻松定义传入的负载和验证规则。您还可以将传入的数据简单地转换为例如整数值。
安装
composer require mkoprek/request-validation-bundle
用法
您需要创建一个扩展 AbstractRequest 的类,然后
- 创建您想从请求中获取的字段作为类属性
- 将验证规则作为 Symfony 约束添加到
getValidationRules()
方法 - 将变量添加到其他类型或对象(例如 Uuid)
请求
<?php declare(strict_types=1); use MKoprek\RequestValidation\Request\AbstractRequest; use Symfony\Component\Uid\Uuid; use Symfony\Component\Validator\Constraints as Assert; class UserCreateRequest extends AbstractRequest { protected string $id; protected ?string $name; public function getId(): Uuid { return Uuid::fromString($this->id); } public function getName(): ?string { return $this->name; } /** * @return array<Assert\Collection> */ public function getValidationRules(): array { return [ new Assert\Collection([ 'id' => new Assert\Required([ new Assert\NotNull(), new Assert\NotBlank(), new Assert\Uuid(), ]), 'name' => new Assert\Required([ new Assert\NotNull(), new Assert\NotBlank(), new Assert\Type('string'), ]), ]), ]; } }
控制器
<?php declare(strict_types=1); use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; #[Route('/api')] class UserCreateController { #[Route('/users', name: 'users.create', methods: 'POST')] public function post(UserCreateRequest $request): JsonResponse { $id = $request->getId(); $name = $request->getName(); $this->commandBus->handle( CreateUserCommand($request->getId(), $request->getName()) ); return new JsonResponse(['id' => $id->toRfc4122()], Response::HTTP_CREATED); } }
验证
验证在控制器解析请求之前自动进行。如果有任何验证错误,将抛出 ApiValidationException
。如果您想返回带有错误的 JSON,只需将以下内容添加到您的 services.yaml 中。它将处理所有异常。
MKoprek\RequestValidation\Response\ResponseSubscriber: tags: - { name: kernel.event_subscriber, event: kernel.exception }
带有验证错误的示例响应
{ "status": 422, "message": "Request validation error", "details": [ { "field": "[id]", "error": "This field is missing." }, { "field": "[name]", "error": "This field is missing." }, { "field": "[name2]", "error": "This field was not expected." } ]
带有其他异常的示例
{ "status": 500, "message": "Attempted to call an undefined method named 'notExists' of class 'UserCreateRequest'." }
许可证
MIT
作者信息
由 Maciej Koprek (mkoprek) 创建于 2021 年