kr0lik/laravel-param-converter

在 Laravel 中运行的具有 JSON 序列化的 Symfony 参数转换器。

0.0.5 2024-01-18 09:13 UTC

This package is auto-updated.

Last update: 2024-09-18 10:46:05 UTC


README

具有 JSON 序列化的请求参数转换器

安装

$ composer require kr0lik/laravel-param-converter

设置非常简单,只需将服务提供者添加到您的 app.php 配置文件中。

Kr0lik\ParamConverter\ParamConverterServiceProvider::class,

您还可以发布配置,以便您可以添加自己的参数转换器。

$ php artisan vendor:publish --provider="Kr0lik\ParamConverter\ParamConverterServiceProvider"

用法

添加配置

<?php

declare(strict_types=1);

use Kr0lik\ParamConverter\Converter\RequestDataConverter;
use Kr0lik\ParamConverter\Converter\QueryParamConverter;

return [
    'request' => [
        'autoConvert' => true,
    ],
    'converters' => [
        RequestDataConverter::NAME => RequestDataConverter::class,
        QueryParamConverter::NAME => QueryParamConverter::class,
    ],
];

创建 DTO

<?php

declare(strict_types=1);

use Kr0lik\ParamConverter\Contract\RequestDtoInterface;
use Symfony\Component\Validator\Constraints as Assert;

final readonly class TextDto implements RequestDtoInterface
{
    public function __construct(
        #[Assert\GreaterThanOrEqual(10)]
        public int               $a,
        #[Assert\NotBlank()]
        public string            $b,
        public DateTimeImmutable $c,
    ) {
    }
}

创建操作或控制器

<?php
use Kr0lik\ParamConverter\Annotation\ParamConverter;

class YourAction extends Controller
{
    #[ParamConverter('token', converter: QueryParamConverter::NAME)]
    #[ParamConverter("requestDto", class=TextDto::class)]
    public function __invoke(string $token, TextDto $requestDto)
    {
        ....
    }
}

如果配置中设置了 autoConvert = true,则添加注解

<?php
use Kr0lik\ParamConverter\Annotation\ParamConverter;

class YourAction extends Controller
{
    public function __invoke(TextDto $requestDto)
    {
        ....
    }
}