nacoma / payloads
Laravel 的强类型数据包库。
dev-main
2021-07-12 17:47 UTC
Requires
- php: ^8.0
- illuminate/contracts: ^8.0 || ^9.0
- illuminate/database: ^8.0 || ^9.0
- illuminate/http: ^8.0 || ^9.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.3
- vimeo/psalm: ^4.8
This package is auto-updated.
Last update: 2024-09-13 00:37:41 UTC
README
这是一个 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); } }