定制 flavacaster/symfony-http-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

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 我们能提供哪些服务?
定制开发 / 二次开发

基于 flavacaster/symfony-http-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-01-21