peedro07/symfony-api-rest-bundle

此包与Symfony结合使用,可以更轻松地管理您数据的渲染

安装: 48

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

1.5.0 2024-07-16 08:56 UTC

This package is auto-updated.

Last update: 2024-09-16 09:22:55 UTC


README

简化Symfony API创建的包

2.0版本的包与Symfony 7.x.x兼容

此包通过方便的注解简化了API的开发。它需要扩展AbstractPGTRest

入门

首先,在控制器中扩展此包

class UserController extends AbstractPGTRest

确保通过调用父构造函数初始化responseOptionsService

parent::__construct($responseOptionsService);

示例用法

通过一个示例利用此包

//UserEntity
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;

#[Groups(["user:read"])] // Initialize the group for serialization
#[ORM\Column(length: 255)]
private ?string $name = null;
//UserController
use App\Repository\UserRepository;
use PGTRest\Attribute\ResponseOptions;
use PGTRest\Controller\AbstractPGTRest;
use PGTRest\Service\ResponseOptionsService;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

    public function __construct(ResponseOptionsService $responseOptionsService)
    {
        parent::__construct($responseOptionsService);  
    }

    #[Route('/users', name: 'app_users_get', methods: ["GET"])]
    #[ResponseOptions(statusCode: 200, groups: ["user:read"], formatDate: 'Y-m-d']) // Set the response options with the desired status code and serialization group
    public function index(UserRepository $userRepository): Response
    {
        $users = $userRepository->findAll();
    
        return $this->view($users); //option 1
        //return $this->view(['all_users' => $users]); option 2
    }
//option 1
{
    "users": [
        {
            "name": "John"
        },
        {
            "name": "Jane"
        }
    ]
}
//option 2
{
    "all_users": [
        {
            "name": "John"
        },
        {
            "name": "Jane"
        }
    ]
}

注意:视图方法接受一个数据数组以及可选的$statusCode和$groups参数

其他功能

当设置formatDate选项时,此包将根据指定的格式格式化响应中的日期字段。

#[ResponseOptions(statusCode: 200, groups: ["user:read"], formatDate: 'Y-m-d'])