sirius-program / sirius-helpers
此辅助程序包含许多函数,可以帮助您构建应用程序。
Requires
- php: ^8.2
- giggsey/libphonenumber-for-php: ^8.13
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
README
此辅助程序包含许多函数,可以帮助您构建应用程序。
安装
您可以通过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种方法来操作字符串:encrypt
、decrypt
、urlSafe
、urlUnsafe
、isPartOfPhoneNumber
、toPhoneNumber
、sanitizePhoneNumber
、toInitials
和toStr
。
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 种方法来操作数字:toInt
、toFloat
、format
、toRoman
、toCurrency
、toCent
、fromCent
和 spell
。
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 种方法来操作日期时间字符串:toDateTime
、toCarbon
、format
、toLongMonth
、toShortMonth
、toLongDay
和 toShortDay
。
toDateTime(string $fromFormat = 'Y-m-d H:i:s')
此方法将把您的日期时间字符串转换为 PHP 的 DateTime
对象。
toCarbon(string $fromFormat = 'Y-m-d H:i:s')
此方法将把您的日期时间字符串转换为 nesbot 的 Carbon
对象。
format(string $format = 'Y-m-d H:i:s')
此方法将根据 $format
参数格式化您的日期时间字符串。提供的日期时间字符串必须首先转换为 PHP 的 DateTime
对象或 nesbot 的 Carbon
对象。
toLongMonth()
此方法将把您的日期时间字符串转换为长月份字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTime
或 nesbot 的 Carbon
对象。此方法将使用配置在 app.locale
中的语言。
echo sirius()->dateTime(12)->toLongMonth();
上面的代码将输出 December
toShortMonth()
此方法将把您的日期时间字符串转换为短月份字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTime
或 nesbot 的 Carbon
对象。此方法将使用配置在 app.locale
中的语言。
echo sirius()->dateTime('2024-01-01')->toShortMonth();
上面的代码将输出 Jan
toLongDay()
此方法将把您的日期时间字符串转换为长日期字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTime
或 nesbot 的 Carbon
对象。此方法将使用配置在 app.locale
中的语言。
echo sirius()->dateTime(6)->toLongDay();
上面的代码将输出 Saturday
toShortDay()
此方法将把您的日期时间字符串转换为短日期字符串。提供的日期时间字符串可以是整数、日期时间字符串(例如:'2024-01-01')、PHP 的 DateTime
或 nesbot 的 Carbon
对象。此方法将使用配置在 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 个静态方法:getAllMonths
和 getAllDays
。正如其名,这两个方法将根据您配置在 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 实例访问两个有用的静态方法:calculateDistanceInMeters
和 setNullIfBlank
。
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
来保留零、空数组或空字符串。