ashallendesign / type-safe
确保PHP变量类型的包
Requires
- php: ^8.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.3
This package is auto-updated.
Last update: 2024-03-19 11:16:34 UTC
README
目录
概述
Type Safe 是一个轻量级的包,您可以在PHP项目中使用它来确保变量类型。
如果您想了解我为什么创建这个包,请查看这篇博客文章。
安装
您可以通过Composer安装此包
composer require ashallendesign/type-safe
该包已开发和测试,以与以下最低要求兼容
- PHP 8.0
用法
简单检查
验证属性是否为整数
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::INT);
验证属性是否为字符串
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::STRING);
验证属性是否为布尔值
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::BOOLEAN);
验证属性是否为闭包
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::CLOSURE);
验证属性是否为对象
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::OBJECT);
验证属性是否为数组
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::ARRAY);
验证属性是否为关联数组
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::ASSOC_ARRAY);
高级检查
验证属性是否为特定类的对象
use App\Models\User; use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::object(User::class));
验证属性是否为包含特定字段的数组
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::arrayOf(Type::INT));
验证属性是否为包含特定字段的关联数组
use AshAllenDesign\TypeSafe\Type; $validatedField = safe($field, Type::assocArrayOf(Type::STRING, Type::STRING));
自定义检查
您可能想使用包中未提供的自定义检查。为此,您可以创建自己的类,该类实现 AshAllenDesign\TypeSafe\Check
接口。
该接口强制执行两个方法: passes()
和 message()
。 passes()
方法用于定义您的逻辑,以确定字段是否是正确的类型。 message()
方法用于在验证失败时返回传递给抛出异常的消息。
例如,如果我们想创建一个自定义检查来断言我们的字段是Laravel Collection
,且只包含 User
模型,它可能看起来像这样
use App\Models\User; use AshAllenDesign\TypeSafe\Check; use Illuminate\Support\Collection; class LaravelUserCollection implements Check { public function passes(mixed $prop): bool { if (!$prop instanceof Collection) { return false; } return $prop->whereInstanceOf(User::class)->count() === $prop->count(); } public function message(mixed $prop): string { return 'One of the items is not a User model.'; } }
然后我们可以这样使用该检查
$collection = collect([new User(), new TestCase()]); safe($collection, new LaravelUserCollection());
跳过检查
有时您可能不想运行类型检查。例如,您可能希望在生产环境中禁用它们,而仅在本地、测试和预发布环境中运行。要跳过检查,您可以使用下面的示例中的 skipChecks
use AshAllenDesign\TypeSafe\Type; use AshAllenDesign\TypeSafe\TypeSafe; TypeSafe::skipChecks(); $validatedField = safe($field, Type::ASSOC_ARRAY);
辅助方法
您可以使用以下三种方式使用包将类型安全检查添加到您的代码中。
第一种方法是通过使用 TypeSafe
对象本身,如下所示
use AshAllenDesign\TypeSafe\TypeSafe; $validatedField = (new TypeSafe())->safe($field, Type::INT);
或者,您可以使用与上面代码相同功能的 safe()
辅助函数。您可以使用辅助函数如下所示
$validatedField = safe($field, Type::INT);
TypeSafe
还包括您可以用于所有简单检查的辅助方法。示例显示了如何验证整数字段
use AshAllenDesign\TypeSafe\TypeSafe; $validatedField = TypeSafe::int($field);
测试
要运行包的测试,您可以使用以下命令
composer test
安全
如果您发现任何安全问题,请直接通过mail@ashallendesign.co.uk联系我报告。
贡献
如果您想对该包进行任何更改或改进,请随意发起拉取请求。
要为这个库做出贡献,请在提交拉取请求之前遵循以下指南
- 为添加的任何新功能编写测试。如果您正在更新现有代码,请确保现有测试通过,并在需要时编写更多测试。
- 遵循PSR-12编码标准。
- 将所有拉取请求提交到
master
分支。
致谢
变更日志
查看变更日志以获取关于最新更改的更多信息。
许可证
MIT许可(MIT)。有关更多信息,请参阅许可文件。