vod,PHP 的 zod 风格验证库

dev-main 2024-09-16 05:48 UTC

This package is auto-updated.

Last update: 2024-09-16 05:48:27 UTC


README

Vod 是一个强大的 PHP 库,用于验证和定义对象结构。它提供了一个流畅的 API 来创建模式、解析数据和生成 TypeScript 定义和 JSON 模式。

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

安装

您可以通过 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)。有关更多信息,请参阅 许可文件