sirius-program/sirius-helpers

此辅助程序包含许多函数,可以帮助您构建应用程序。

1.1.4 2024-08-02 16:11 UTC

This package is auto-updated.

Last update: 2024-10-02 16:33:08 UTC


README

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

此辅助程序包含许多函数,可以帮助您构建应用程序。

安装

您可以通过composer安装此包

composer require sirius-program/sirius-helpers

可选,您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="sirius-helpers-config"

这是已发布配置文件的内容

return [
    'country_code' => env('COUNTRY_CODE', 'ID'),
    'currency_locale' => env('CURRENCY_LOCALE', 'id_ID'),
];

或者,您可以通过.env文件轻松更改它们。

COUNTRY_CODE=US
CURRENCY_LOCALE=en_US

用法

// use Sirius class
$sirius = new Sirius();

// or use the helper function
sirius();

更多详细信息请参阅以下内容。

测试

要测试此包,您可以运行以下命令

composer test

vendor/bin/pest

检查当前版本

您可以通过运行命令来检查您目前正在使用的SiriusHelpers版本

php artisan about

环境组下您可以看到类似以下的一行

SiriusHelpers Version ................................................................ 1.1.4

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件以获取更多信息。

字符串辅助工具

此辅助工具包含许多函数,可以帮助您操作字符串。

用法

您可以从Sirius实例中使用它

// use Sirius class
$sirius = new Sirius();
$helper = $sirius->string();

// or use the helper function
sirius()->string();

或直接从StringHelpers实例中使用它

// use StringHelpers class
$helper = new StringHelpers();

// or use the helper function
sString();

您可以使用9种方法来操作字符串:encryptdecrypturlSafeurlUnsafeisPartOfPhoneNumbertoPhoneNumbersanitizePhoneNumbertoInitialstoStr

encrypt(?string $salt = null)

此方法将加密您提供的字符串并实现一个使用盐和初始化向量进行AES-256-CBC加密的加密方法,以安全地加密字符串。加密的字符串是base64编码的。默认情况下,此辅助工具将使用您的APP_KEY作为盐。

echo sirius()->string('text you want to encrypt @ 123')->encrypt(salt: 'sirius');

上面的代码将输出加密的文本:MwTMh2laUQDG09O9ZsVCv2c8pON/3IlIHf+8Dq55gkg=

decrypt(?string $salt = null)

此方法将解密您提供的密文,并实现一个使用AES-256-CBC加密算法(如上所述的encrypt()方法)的解密方法。默认情况下,此辅助工具将使用您的APP_KEY作为盐。

echo sirius()->string('MwTMh2laUQDG09O9ZsVCv2c8pON/3IlIHf+8Dq55gkg=')->decrypt(salt: 'sirius');

上面的代码将输出解密后的文本:text you want to encrypt @ 123

urlSafe()

此方法将您的字符串转换为URL安全的格式,通过替换可能导致URL问题的特定字符为替代字符。

echo sirius()->string('MwTMh2laUQDG09O9ZsVCv2c8pON/3IlIHf+8Dq55gkg=')->urlSafe();

上面的代码将输出URL安全的格式文本:MwTMh2laUQDG09O9ZsVCv2c8pON_3IlIHf.8Dq55gkg-

urlUnsafe()

此方法将URL安全的字符串转换为在将其转换为URL安全字符串之前(如上所述的urlSafe()方法)的原始文本。

echo sirius()->string('MwTMh2laUQDG09O9ZsVCv2c8pON_3IlIHf.8Dq55gkg-')->urlUnsafe();

上面的代码将输出URL安全的格式文本:MwTMh2laUQDG09O9ZsVCv2c8pON/3IlIHf+8Dq55gkg=

isPartOfPhoneNumber(): bool

此方法将检查给定的字符串是否为电话号码的一部分。它将从给定的字符串中删除加号(+)、减号(-)、括号和空格,并检查剩余的字符串是否仅包含数字,如果是,则返回true,否则返回false。

print_r(sirius()->string('+62 812-3')->isPartOfPhoneNumber())

上面的代码将返回true

print_r(sirius()->string('+62 812-3aa')->isPartOfPhoneNumber())

上面的代码将返回false

toPhoneNumber(bool $zeroPrefix = false, ?string $countryCode = null)

此方法可以处理任何电话号码字符串,解析、验证并按更易读的电话号码格式进行格式化。默认格式将使用加号和基于你设置的第二个参数的国家代码前缀,如果没有设置,则使用在 sirius-helper.country_code 中的配置文件中的国家代码。如果你想格式化字符串前加零,请将 $zeroPrefix 参数设置为 true。此方法依赖于底层的 libphonenumber 包。

echo sirius()->string('+628123456789')->toPhoneNumber();

上述代码将输出可读的电话号码文本:+62 812-3456-789

sanitizePhoneNumber(bool $zeroPrefix = false, ?string $countryCode = null)

此方法将处理任何电话号码字符串,将其净化,以便从提供的文本中获取“仅数字”文本。

echo sirius()->string('+62 812-3456-789')->sanitizePhoneNumber(zeroPrefix: true);

上述代码将输出净化后的电话号码文本:08123456789

toInitials(int $length = 2)

此方法将您的文本转换为它的首字母。默认长度为 2,您可以将它设置为 0 以返回所有首字母。

echo sirius()->string('Sirius Helpers by Sirius Program')->toInitials();

上述代码将输出首字母文本:SH

echo sirius()->string('Sirius Helpers by Sirius Program')->toInitials(length: 0);

上述代码将输出首字母文本:SHBSP

toStr()

此方法将您的文本转换为 Laravel 的 Stringable 实例。

方法链式调用

上述每个方法(除了 isPartOfPhoneNumber()toStr())都返回 $this,因此您也可以像这样链式调用方法

echo sirius()->string('+628123456789')
    ->toPhoneNumber() // +62 812-3456-789
    ->sanitizePhoneNumber(zeroPrefix: true) // 08123456789
    ->encrypt() // OWb2zHt440dxKnH5jLkklg==
    ->urlSafe() // OWb2zHt440dxKnH5jLkklg--
    ->urlUnsafe() // OWb2zHt440dxKnH5jLkklg==
    ->decrypt() // 08123456789
    ->toStr(); // will convert the text into Laravel's Stringable instance

全局输出

您可以在上述每个方法中使用 dump()dd()。例如

echo sirius()->string('any text')
    ->encrypt()
    ->dump()
    ->decrypt()
    ->dd();

数字助手

此助手包含许多函数,可以帮助您操作数字。

用法

您可以从Sirius实例中使用它

// use Sirius class
$sirius = new Sirius();
$helper = $sirius->number();

// or use the helper function
sirius()->number();

或者直接从 NumberHelpers 实例使用它

// use NumberHelpers class
$helper = new NumberHelpers();

// or use the helper function
sNumber();

您可以使用以下 6 种方法来操作数字:toInttoFloatformattoRomantoCurrencytoCentfromCentspell

toInt()

此方法将您的数字转换为整数。

echo sirius()->number(1234.56)->toInt();

上述代码将输出 1234

toFloat()

此方法将您的数字转换为浮点数。

echo sirius()->number('1234.56')->toFloat();

上述代码将输出 1234.56

format(?string $currencyLocale = null)

此方法将根据您提供的 $currencyLocale 或配置文件中设置的货币区域设置添加分隔符到您的数字。如果没有提供任何区域或未在配置文件中设置,默认货币区域将为 id_ID

echo sirius()->number(1234567.89)->format();

上述代码将输出 1.234.567,89

echo sirius()->number(1234567.89)->format(currencyLocale: 'en_US');

上述代码将输出 1,234,567.89

toRoman()

此方法将您的数字转换为罗马数字。

echo sirius()->number(1234)->toRoman();

上述代码将输出 MCCXXXIV

toCurrency(?string $currencyLocale = null)

此方法将您的数字转换为货币格式。如果没有提供任何区域或未在配置文件中设置,默认货币区域将为 id_ID

echo sirius()->number(1234567.89)->toCurrency();

上述代码将输出 Rp1.234.567,89

echo sirius()->number(1234567.89)->toCurrency(currencyLocale: 'en_US');

上述代码将输出 $1,234,567.89

toCent()

此方法将您的数字转换为分(乘以给定的数字乘以 100)。

echo sirius()->number(1234567.89)->toCent();

上述代码将输出 123.456.789

fromCent(bool $impactOriginalNumber = true)

此方法将给定的数字除以 100。默认情况下,此方法的结果还将影响原始数字,如果您想保留原始数字的分,请将 $impactOriginalNumber 参数设置为 false

echo sirius()->number(123.456.789)->fromCent();

上述代码将输出 1234567.89

spell(?string $currencyLocale = null)

此方法将把您的数字拼写出来。如果没有提供任何区域设置或未在配置文件中设置,默认货币区域将是 id_ID。同时,语言也将基于该区域设置进行拼写。

echo sirius()->number(1234567.89)->spell();

上面的代码将输出 一百万二千三百四十五万六千七百八十九

echo sirius()->number(1234567.89)->spell(currencyLocale: 'en_US');

上面的代码将输出 一百万二千三百四十五万六千七百八十九点八九

如果您在 toCurrency() 方法之后链式调用此方法,则结果将附加拼写货币符号。

echo sirius()->number(1234567.89)->toCurrency(currencyLocale: 'en_US')->spell();

上面的代码将输出 一百万二千三百四十五万六千七百八十九点八九美元

获取原始数字

您始终可以检索原始数字。

echo sirius()->number(10000.05)->toCurrency()->getOriginal();

上面的代码将输出 10000.05

方法链式调用

上述每个方法都返回 $this,因此您也可以像这样链式调用方法

echo sirius()->number(10000)
    ->toCurrency() // Rp10.000
    ->spell() // sepuluh ribu rupiah
    ->getOriginal(); // 10000

全局输出

您可以在上述每个方法中使用 dump()dd()。例如

echo sirius()->number(10000.05)
    ->toCurrency()
    ->dump()
    ->spell()
    ->dd();

日期时间助手

这些助手包含许多可以帮助您操作日期时间字符串的函数。

用法

您可以从Sirius实例中使用它

// use Sirius class
$sirius = new Sirius();
$helper = $sirius->dateTime();

// or use the helper function
sirius()->dateTime();

或者直接从 DateTimeHelpers 实例使用它

// use DateTimeHelpers class
$helper = new DateTimeHelpers();

// or use the helper function
sDateTime();

您可以使用以下 7 种方法来操作日期时间字符串:toDateTimetoCarbonformattoLongMonthtoShortMonthtoLongDaytoShortDay

toDateTime(string $fromFormat = 'Y-m-d H:i:s')

此方法将把您的日期时间字符串转换为 PHP 的 DateTime 对象。

toCarbon(string $fromFormat = 'Y-m-d H:i:s')

此方法将把您的日期时间字符串转换为 nesbotCarbon 对象。

format(string $format = 'Y-m-d H:i:s')

此方法将根据 $format 参数格式化您的日期时间字符串。提供的日期时间字符串必须首先转换为 PHP 的 DateTime 对象或 nesbotCarbon 对象。

toLongMonth()

此方法将把您的日期时间字符串转换为长月份字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTimenesbotCarbon 对象。此方法将使用配置在 app.locale 中的语言。

echo sirius()->dateTime(12)->toLongMonth();

上面的代码将输出 December

toShortMonth()

此方法将把您的日期时间字符串转换为短月份字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTimenesbotCarbon 对象。此方法将使用配置在 app.locale 中的语言。

echo sirius()->dateTime('2024-01-01')->toShortMonth();

上面的代码将输出 Jan

toLongDay()

此方法将把您的日期时间字符串转换为长日期字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTimenesbotCarbon 对象。此方法将使用配置在 app.locale 中的语言。

echo sirius()->dateTime(6)->toLongDay();

上面的代码将输出 Saturday

toShortDay()

此方法将把您的日期时间字符串转换为短日期字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTimenesbotCarbon 对象。此方法将使用配置在 app.locale 中的语言。

echo sirius()->dateTime('2024-01-01')->toShortDay();

上面的代码将输出 Mon

获取原始日期时间字符串

您始终可以检索原始日期时间字符串。

echo sirius()->dateTime('2024-01-01')->toCarbon('Y-m-d')->getOriginal();

上面的代码将输出 2024-01-01

方法链式调用

上述每个方法都返回 $this,因此您也可以像这样链式调用方法

echo sirius()->dateTime('2024-01-01 01:01:01')
    ->toDateTime() // will be converted into PHP's DateTime object
    ->format('Y-m-d') // 2024-01-01
    ->toLongMonth() // January
    ->getOriginal(); // 2024-01-01 01:01:01

全局输出

您可以在上述每个方法中使用 dump()dd()。例如

echo sirius()->dateTime('2024-01-01 01:01:01')
    ->toDateTime()
    ->format('Y-m-d')
    ->dump()
    ->toLongMonth()
    ->dd()

静态方法

这些助手包含 2 个静态方法:getAllMonthsgetAllDays。正如其名,这两个方法将根据您配置在 app.locale 中的语言检索所有月份和日期。

这两种方法接受2个参数:$formatter$format。默认的 $formatter 将是 new \IntlDateFormatter($locale, \IntlDateFormatter::FULL, \IntlDateFormatter::NONE),默认的 $format 将是 MMMM。您可以在 ICU 文档 中找到其他格式符号。

$months = DateTimeHelpers::getAllMonths();

$months 变量将是一个包含这些内容的数组

[
    1 => "January",
    2 => "February",
    3 => "March",
    4 => "April",
    5 => "May",
    6 => "June",
    7 => "July",
    8 => "August",
    9 => "September",
    10 => "October",
    11 => "November",
    12 => "December",
]
$days = DateTimeHelpers::getAllDays();

$days 变量将是一个包含这些内容的数组

[
    0 => "Sunday",
    1 => "Monday",
    2 => "Tuesday",
    3 => "Wednesday",
    4 => "Thursday",
    5 => "Friday",
    6 => "Saturday",
]

getAllDays 方法还接受第三个参数 $startingDay。默认值将是常量 START_WITH_SUNDAY。您可以将其设置为常量 START_WITH_MONDAY 以使其从星期一开始。

$days = DateTimeHelpers::getAllDays(startingDay: DateTimeHelpers::START_WITH_MONDAY);

$days 变量将是一个包含这些内容的数组

[
    1 => "Monday",
    2 => "Tuesday",
    3 => "Wednesday",
    4 => "Thursday",
    5 => "Friday",
    6 => "Saturday",
    7 => "Sunday",
]

其他静态辅助方法

您可以从 Sirius 实例访问两个有用的静态方法:calculateDistanceInMeterssetNullIfBlank

calculateDistanceInMeters(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000): float

此方法将计算两个经纬度点之间的距离(单位:米)。默认的 $earthRadius 将是 6371000(单位:米)。

例如

echo SiriusProgram\SiriusHelpers\Sirius::calculateDistanceInMeters(-7.3197956, 112.765537, -7.3231706, 112.7578611);

上面的代码将输出 926.0155020636498

setNullIfBlank(mixed $data, bool $keepZero = false, bool $keepEmptyArray = false, bool $keepEmptyString = false): mixed

此方法将在给定的数据为零、空数组或空字符串时将其设置为 null。如果给定的数据是数组(并且它不为空),则此方法将遍历并转换其内部的数据。

例如

print_r(SiriusProgram\SiriusHelpers\Sirius::setNullIfBlank([0, 1, '', 2, null, 3, []]));

上面的代码将打印 [null, 1, null, 2, null, 3, null]

您可以通过将 $keepZero$keepEmptyArray 和/或 $keepEmptyString 参数设置为 true 来保留零、空数组或空字符串。