nacoma/payloads

Laravel 的强类型数据包库。

dev-main 2021-07-12 17:47 UTC

This package is auto-updated.

Last update: 2024-09-13 00:37:41 UTC


README

tests codecov

这是一个 MVP/POC。

摘要

具有 #[Payload] 属性的类可以从容器中解析,并且会自动使用来自请求数据包的数据进行填充。这实现了对请求体的强类型提示和智能感知,同时将数据包与 Request 解耦。

验证

Payloads 提供的验证是一个轻量级的强类型包装,围绕 Laravel 内置的验证。

填充

实例

从请求参数创建类的实例

use Nacoma\Payloads\Hydrators\Attributes\MakeInstance;

new class {
    #[MakeInstance]
    public SomeClass $someClass1;
    
    #[MakeInstance(SomeOtherConcrete::class)]
    public SomeClass $someClass2;
};

数组与集合

MakeList 插件假设类型是 array 或某种类型 collection,它接受一个 array 项作为构造函数参数。

use Nacoma\Payloads\Hydrators\Attributes\MakeList;
use Illuminate\Support\Collection;

new class {
    /**
     * @var SomeClass[] 
     */
    #[MakeList(SomeClass::class)]
    public array $items1;
    
    
    #[MakeList(SomeClass::class)]
    public Collection $item2;
};

模型

使用 FindModel 从数据库中检索模型。

use Nacoma\Payloads\Hydrators\Attributes\FindModel;

new class {
    #[FindModel]
    public User $user;
};

更多示例

use Nacoma\Payloads\Hydrators\Attributes\FindModel;use YourApp\Models\Country;
use Nacoma\Payloads\Rules\Attributes as Rule;
use Nacoma\Payloads\Payload;
use Nacoma\Payloads\Transformers\Attributes as Transform;

#[Payload]
class UpdateUser {
    public function __construct(
        #[Rule\Required]
        public string $name,
        
        #[Rule\Required]
        #[Rule\Min(13)]
        #[Rule\Max(120)]
        public int $age,
        
        #[Rule\Required]
        #[Rule\Exists('countries', 'id')]
        #[Transform\Rename('country_id')]
        #[FindModel]
        public Country $country,
    ) {
      //
    }
}
class UserController extends Controller {
    public function update(User $user, UpdateUser $payload)
    {
        dump($payload->country->id);
    }
}