flavacaster/symfony-http-bundle
Composer 安装命令:
composer require flavacaster/symfony-http-bundle
包简介
symfony http request validator bundle
README 文档
README
This package still under development.
Requests injection
How it works:
- You create request class, describe it structure with JMS serializer annotations and Symfony validation annotations.
- You inject request in your controller action.
- Bundle validates request according to your request class, if request is invalid, it throws custom validation exception.
- If request is valid, it is deserialized to your request class.
Important note: HTTP request fields always come as strings, to validate them correctly, they are soft casted according to type annotations in request class.
You can register listener, that will convert
Flavacaster\SymfonyHttpBundle\EventListener\RequestPayloadExceptionListener exception to json response:
# (config/services.yaml)
services:
# ...
Flavacaster\SymfonyHttpBundle\EventListener\RequestPayloadExceptionListener:
tags:
- { name: kernel.event_listener, event: kernel.exception }
Example:
Request class:
use Flavacaster\SymfonyHttpBundle\Interfaces\RequestPayloadInterface; final class CreateUserRequest implements RequestPayloadInterface { /** * @Constraints\NotBlank * @Constraints\Type(type="string") */ private string $username; /** * @Constraints\NotBlank * @Constraints\Type(type="integer") */ private int $age; /** * @Constraints\NotBlank * @Constraints\Type(type="bool") */ private bool $terms; }
Controller action:
/** * @Route("/api/endpoint") */ public function create(CreateUserRequest $request): Response { dd($request); }
Response for request without parameters:
{
"code": 422,
"message": "Validation error occurred",
"errors": {
"[username]": "This field is missing.",
"[age]": "This field is missing.",
"[terms]": "This field is missing."
}
}
Nested objects and array of objects
Nested objects and arrays of objects are handled with Flavacaster/symfony-validators-bundle package.
Example:
final class Request implements RequestPayloadInterface { /** * @Constraints\NotBlank * @NestedObject(NestedObject::class) */ private NestedObject $select2; /** * @Constraints\NotBlank * @NestedObjects(NestedObject::class) * * @Serializer\Type("array<NestedObject>") */ private array $list; }
Arrays
One remark about arrays: arrays of integer/float/bool must have @var annotation describing their inner
elements scalar type. It needed for soft type casting before validation. Available values: int[],
float[], boolean[], string[].
Example:
final class Request implements RequestPayloadInterface { /** * @Constraints\NotBlank * * @Serializer\Type("array") * @var float[] */ private array $amounts; }
AllowExtraFields and AllowMissingFields
Validatior allowExtraFields and allowMissingFields parameters can be overwritten with annotations:
use Flavacaster\SymfonyValidatorsBundle\Options\AllowExtraFields; use Flavacaster\SymfonyValidatorsBundle\Options\AllowMissingFields; /** * @AllowExtraFields * @AllowMissingFields */ final class Request implements RequestPayloadInterface { }
🥔
flavacaster/symfony-http-bundle 适用场景与选型建议
flavacaster/symfony-http-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 159 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 01 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 flavacaster/symfony-http-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 flavacaster/symfony-http-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 159
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-01-21