halloverden / symfony-request-entity-bundle
Symfony 请求实体扩展包
3.2.0
2023-12-27 22:24 UTC
Requires
- php: >=8.1
- ext-json: *
- halloverden/symfony-http-exceptions: ^1.2|^2.0
- jms/serializer-bundle: ^3.10|^4.2|^5.0
- sensio/framework-extra-bundle: ^5.5|^6.0
- symfony/validator: ^5.4|^6.4|^7.0
This package is auto-updated.
Last update: 2024-08-30 01:50:06 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], ];
使用方法
-
创建一个继承自
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 请求之后) -
在您的控制器中,使用 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())); } }