deanmcpherson / vod
vod,PHP 的 zod 风格验证库
dev-main
2024-09-16 05:48 UTC
Requires
- php: ^8
- laravel/tinker: ^2
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-typescript-transformer: ^2
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-data: ^4.8
This package is auto-updated.
Last update: 2024-09-16 05:48:27 UTC
README
Vod 是一个强大的 PHP 库,用于验证和定义对象结构。它提供了一个流畅的 API 来创建模式、解析数据和生成 TypeScript 定义和 JSON 模式。
安装
您可以通过 Composer 安装 Vod
composer require deanmcpherson/vod
测试
composer test
使用
基本模式创建
要创建模式,请使用 v()
函数访问 Vod API
use function Vod\Vod\v; $schema = v()->object([ 'name' => v()->string(), 'age' => v()->number()->int(), 'email' => v()->string()->optional(), ]);
解析数据
您可以根据您的模式解析数据
$data = ['name' => 'John', 'age' => 30]; $result = $schema->parse($data);
可用类型
Vod 支持各种类型
v()->string()
:字符串类型v()->number()
:数字类型(可以进一步指定为int()
或float()
)v()->boolean()
:布尔类型v()->array()
:数组类型v()->object()
:对象类型v()->enum()
:枚举类型v()->any()
:任何类型v()->date()
:日期类型v()->tuple()
:元组类型v()->union()
:联合类型v()->anyOf()
:联合类型的别名v()->intersection()
:交集类型v()->all()
:交集类型的别名
可选字段
使字段可选
v()->string()->optional()
默认值
设置默认值
v()->string()->default('default value')
请注意,默认值仅在字段未提供数据且为可选时才使用。
使用规则
如果您在 Laravel 中使用,您可以使用 rules
方法向您的模式添加规则。这依赖于 Laravel 验证器外观,因此只有在它可用的情况下才会工作。
v()->string()->rules('email')->parse('not an email') // throws an exception v()->string()->rules('email')->parse('dean@example.com') // returns dean@example.com
添加和引用定义
将定义添加到您的模式以创建可重用的组件
$schema = v()->object([ 'user' => v()->ref('userSchema'), 'posts' => v()->array(v()->ref('postSchema')), ]) ->define('userSchema', v()->object([ 'id' => v()->number()->int(), 'name' => v()->string(), 'email' => v()->string(), ])) ->define('postSchema', v()->object([ 'id' => v()->number()->int(), 'title' => v()->string(), 'content' => v()->string(), ]));
要引用已定义的模式,请使用 v()->ref('schemaName')
。
注意:定义只能添加到顶级对象模式。它们对于嵌套对象或其他类型不可用。
使用定义可以帮助您创建更模块化和可重用的模式,特别是对于复杂的数据结构。
生成 TypeScript 定义
生成 TypeScript 定义
$typescript = $schema->toTypescript();
生成 JSON 模式
生成 JSON 模式
$jsonSchema = $schema->toJsonSchema();
添加描述
为您的模式添加描述以获得更好的文档——这目前在 json 模式中使用。
$schema = v()->object([ 'name' => v()->string()->description('The user\'s full name'), 'age' => v()->number()->int()->description('The user\'s age in years'), ])->description('User information schema');
更新日志
有关最近更改的更多信息,请参阅 更新日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
有关如何报告安全漏洞的更多信息,请参阅 我们的安全策略。
致谢
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件。