halloverden/symfony-request-entity-bundle

Symfony 请求实体扩展包

3.2.0 2023-12-27 22:24 UTC

README

将请求反序列化为实体。

安装

确保全局已安装 Composer,如 Composer 文档中的安装章节所述。

使用 Symfony Flex 的应用程序

打开命令行控制台,进入您的项目目录并执行

$ composer require halloverden/symfony-request-entity-bundle

不使用 Symfony Flex 的应用程序

步骤 1: 下载扩展包

打开命令行控制台,进入您的项目目录并执行以下命令以下载此扩展包的最新稳定版本

$ composer require halloverden/request-entity-bundle

步骤 2: 启用扩展包

然后,通过将其添加到项目中 config/bundles.php 文件中注册的扩展包列表中来启用扩展包

// config/bundles.php

return [
    // ...
    HalloVerden\RequestEntityBundle\HalloVerdenRequestEntityBundle::class => ['all' => true],
];

使用方法

  1. 创建一个继承自 AbstractRequestEntity 的类。示例

    <?php
    
    
    namespace App\Entity\Requests;
    
    use App\Entity\Yoo;
    use HalloVerden\RequestEntityBundle\Requests\AbstractRequestEntity;
    use JMS\Serializer\Annotation as Serializer;
    use Symfony\Component\Validator\Constraints as Assert;
    
    /**
     * Class TestRequest
     *
     * @package App\Entity\Requests
     *
     * @Serializer\ExclusionPolicy("ALL")
     */
    class TestRequest extends AbstractRequestEntity {
    
      /**
       * @var array|null
       *
       * @Serializer\SerializedName("test")
       * @Serializer\Type(name="array")
       * @Serializer\Expose()
       */
      private $test;
    
      /**
       * @var Yoo
       *
       * @Serializer\SerializedName("yoo")
       * @Serializer\Type(name="App\Entity\Yoo")
       * @Serializer\Expose()
       */
      private $yoo;
    
      /**
       * @return array|null
       */
      public function getTest(): ?array {
        return $this->test;
      }
    
      /**
       * @inheritDoc
       */
      protected static function getRequestDataValidationFields(): array {
        return [
          'test' => [new Assert\Type(['type' => 'array']), new Assert\Count(['min' => 1])],
          'yoo' => new Assert\Collection([
            'fields' => [
              'message' => [new Assert\Type(['type' => 'string']), new Assert\NotBlank()]
            ],
            'allowMissingFields' => static::allowMissingFields(),
            'allowExtraFields' => static::allowExtraFields()
          ])
        ];
      }
    
    }

    重写 getRequestDataValidationFields 方法以验证请求数据。这些验证规则必须与传入的数组请求相匹配(即解码 json 请求之后)

  2. 在您的控制器中,使用 paramconverter 注入此请求类。示例

    <?php
    
    
    namespace App\Controller;
    
    
    use App\Entity\Requests\TestRequest;
    use App\Response\TestResponse;
    use HalloVerden\ResponseEntityBundle\Controller\AbstractResponseEntityController;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\Routing\Annotation\Route;
    
    /**
     * Class Test2Controller
     *
     * @package App\Controller
     *
     * @Route("/test2", methods={"POST"}, name="testpost")
     */
    class Test2Controller extends AbstractResponseEntityController {
    
      /**
       * @ParamConverter("testRequest", converter="HalloVerden\RequestEntityBundle\ParamConverter\RequestEntityConverter", class="App\Entity\Requests\TestRequest")
       *
       * @param TestRequest $testRequest
       *
       * @return JsonResponse
       */
      public function __invoke(TestRequest $testRequest): JsonResponse {
        return $this->createJsonResponse(new TestResponse($testRequest->getTest()));
      }
    
    }