shooktea/request-deserializer-bundle

将JSON请求反序列化为对象并验证的小型包

1.0.0 2022-01-24 11:44 UTC

This package is auto-updated.

Last update: 2024-09-24 17:27:16 UTC


README

在PHP 8.1和Symfony 6.0上进行了测试。

安装

使用Composer安装

composer require shooktea/request-deserializer-bundle

并将包添加到bundles.php中(如果未由Symfony Flex自动添加)

<?php

return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    // ...
    ShookTea\RequestDeserializerBundle\ShookTeaRequestDeserializerBundle::class => ['all' => true],
];

如何使用它?

  • 创建一个实现ShookTea\RequestDeserializerBundle\Query\QueryInterface(用于GET参数)或ShookTea\RequestDeserializerBundle\Request\RequestInterface(用于POST参数)的类
  • 如有必要,添加来自symfony/serializersymfony/validator组件的注解
  • 将您的类注入到控制器方法中

就是这样!

示例查询类:(用于GET参数)

<?php

use ShookTea\RequestDeserializerBundle\Query\QueryInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation\SerializedName;

class ExampleQuery implements QueryInterface
{
    #[SerializedName('id')]
    #[Assert\Uuid]
    public string $uuid;
}

在控制器中的使用

class ExampleController extends AbstractController
{
    #[Route('/some/route')]
    public function someAction(ExampleQuery $query)
    {
        // do something with query
    }
}

请求/some/route?id=217c26de-132e-49f7-a17d-fd80a70e3fe3后,在控制器的someAction()方法中,对象$query将包含值为"217c26de-132e-49f7-a17d-fd80a70e3fe3"的$uuid