mnavarrocarter / chilean-rut
PHP Rut 值对象,具有验证工具、Doctrine 类型和其他酷炫功能。
Requires
- php: >=8.2
Requires (Dev)
- doctrine/dbal: ^2.10.1|^3.0
- friendsofphp/php-cs-fixer: ^3.49
- phpunit/phpunit: ^10.5
- vimeo/psalm: ^5.22
README
这个库实现了一个简单的不可变 value object 类型的 Rut。
此外,它还提供了两个 types 用于 doctrine/dbal
。
安装
可以通过 composer 安装
composer require mnavarrocarter/chilean-rut
使用方法
解析 Rut
Rut 类能够解析任何格式的 Rut,使用方法为 Rut::parse()
。你可以放心地从网页表单直接获取值,parse
会负责清洗字符串并验证 Rut 是否有效。
注意:一个 Rut 被认为是有效的,当且仅当其验证码算法正确。这个库不能验证 Rut 是否实际存在。
<?php use MNC\Rut; $rut = Rut::parse('23.546.565-4');
验证 Rut
简而言之:一个
Rut
对象总是有效的。
如果你的 Rut 无效,parse
方法将抛出类型为 MNC\Rut\IsInvalid
的异常。这是为了遵循 objects calisthenics 的良好原则:值对象始终处于有效状态,并保持其有效性直到生命周期结束。不允许进行任何可能导致对象状态无效的突变。
因此,MNC\Rut\IsInvalid
对象是完全不可变的。这意味着一旦创建,就不能更改其内部状态:你只能读取信息。以下是可以使用的方法
<?php use MNC\Rut; $rut = Rut::parse('23.546.565-4'); $rut->number; // (int) 23546565 $rut->verifier; // (MNC\Rut\Verifier::Four) 4
格式化 Rut
存在许多不同的格式化 Rut 的方法,这个库支持其中许多。format 方法返回一个对象,你可以通过链式调用对其进行格式化,并提取其信息。
以下是一些示例
<?php use MNC\Rut; $rut = Rut::parse('23.546.565-4'); echo $rut->toString(); // 235465654 echo $rut->toSimple(); // 23546565-4 echo $rut->toHuman(); // 23.546.565-4 echo $rut->last(4); // 6565 echo $rut->last(4, pad: '*'); // ****6565 echo $rut->first(4); // 2354 echo $rut->first(4, pad: '*'); // 2354****
与第三方库的集成
Doctrine DBAL
这个库提供了两个 自定义类型 用于 Doctrine,以便你可以轻松地将你的 Rut
对象映射到关系数据库。
MNC\Rut\Doctrine\RutType
将你的 Rut 映射到 VARCHAR 类型的列。字符串以点和破折号保存。例如:16.894.365-2
。这是一种在空间占用上不是非常高效的保存 Rut 的方法,但有助于在可视化或导出数据库到其他来源时查看。
MNC\Rut\Doctrine\NumericRutType
将你的 Rut 映射到 INTEGER 类型的列。数字不包含验证码,并在列转换为 PHP 值时重新计算。这种保存 Rut 的方式在空间占用上非常高效,但在比较和读取数据库中的数字时可能比较麻烦。
当然,你可以选择最适合你需求的 Type
。
常见问题解答
为什么需要这个库?
这个库源于标准化的需求,为我的所有 PHP 项目创建一个通用的 Rut 类。
虽然有很多 PHP 中 Rut 实现的库,但其中许多存在明显的缺陷
- 它们没有进行单元测试。
- 它们的类型定义不正确。
- 它们的设计不佳,API 存在副作用。
- 它们与框架耦合(如 Laravel Rut 和其他框架)
- 它们不提供工具或与第三方库的集成,如 Doctrine。