mnavarrocarter/chilean-rut

PHP Rut 值对象,具有验证工具、Doctrine 类型和其他酷炫功能。

v4.0.0 2024-03-04 22:02 UTC

This package is auto-updated.

Last update: 2024-09-04 23:11:01 UTC


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 实现的库,但其中许多存在明显的缺陷

  1. 它们没有进行单元测试。
  2. 它们的类型定义不正确。
  3. 它们的设计不佳,API 存在副作用。
  4. 它们与框架耦合(如 Laravel Rut 和其他框架)
  5. 它们不提供工具或与第三方库的集成,如 Doctrine。