ashallendesign/type-safe

此包已被放弃且不再维护。未建议替代包。

确保PHP变量类型的包

v1.0.0 2021-11-30 19:25 UTC

This package is auto-updated.

Last update: 2024-03-19 11:16:34 UTC


README

PHP Type Safe logo

Latest Version on Packagist Build Status Total Downloads PHP from Packagist GitHub license

目录

概述

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