parsidev / randomizr
生成各种随机混乱。
Requires
- php: >=7.2
- illuminate/support: ~7.0 | ~8.0
README
Randomizr 是一个简单的包,可以帮助你生成各种随机内容(哈希、字符串、数字等)。它甚至可以检查创建的随机数是否在给定的数据库表或目录中是唯一的。
目录
$ composer require parsidev/randomizr
注册服务提供者
'providers' => [ ... Parsidev\Support\Providers\RandomizrServiceProvider::class, ], // @file app/config/app.php
此外,您还可以为它注册一个别名,尽管这不是必需的(您也可以使用助手或包含命名空间)
'aliases' => [ ... 'Randomizr' => Parsidev\Support\Facades\Randomizr::class, ], // @file app/config/app.php
为了确保包正确加载,请运行
$ composer update
- 使用方法
2.1. 字符集
Randomizr 区分了几个字符集,包括
简单使用
要使用其中一个字符集生成随机数,只需在 randomizr()
助手上调用的 make()
方法,并告诉它您想使用哪个字符集
randomizr('vowel')->make(); randomizr('num')->make(); ...
设置边界
make()
方法接受两个(可选)参数: $max
和 $min
// Set the max length to 16 randomizr('consonant')->make(16); // Set the minimum length to 2 randomizr('num')->make(16, 2);
组合字符集
您还可以混合使用不同的字符集。例如,如果您想生成一个随机 num
,但允许其中包含 dash
和 underscore
randomizr('num_dash_underscore')->make(); // or, if you prefer randomizr('numDashUnderscore')->make();
2.2. 别名
尽管驼峰或蛇形命名法是一种非常方便的方式将各种字符集合并,但您也可以为它注册一个别名。默认情况下,这些是提供的内容
因此,实际上 lowercase
是 vowel_constant
的别名。坦白说,它看起来更加整洁。
组合别名和/或字符集
如您在上面表中看到的,别名还允许组合字符集与别名,甚至别名与别名本身
// Using charsets only randomizr('vowel_consonant_num')->make(); // Using the `alpha` alias to merge `vowel` and `consonant` randomizr('alpha_num')->make();
2.3 生成唯一的随机数
Randomizr 可以使用 unique()
方法而不是 make()
生成在目录或数据库表中唯一的随机数。
在目录中唯一
randomizr('alpha_punctuation')->unique('path/to/dir');
在数据库表(字段)中唯一
randomizr('lowercase_dash')->unique('tablename@field');
注意:检查与数据库表的唯一性要求包在 Laravel 应用程序中运行。您将无法在其他地方使用此功能。
设置边界
与 make()
一样,您可以为 unique()
设置边界
randomizr('string')->unique('path/to/dir', 16, 6);
2.4. 使用外观
我个人更喜欢使用助手方法(这不需要您在文件顶部放置完整的命名空间),但您也可以使用 facade
或 alias
(如果已在应用程序配置中注册)
randomizr('alpha_num')->make(); // equals randomizr('alphaNum')->make(); // equals Randomizr::alpha_num()->make(); // equals Randomizr::alphaNum()->make();
2.5. 附加助手
除了 randomizr()
助手之外,还包括一些其他助手函数,可以在整个应用程序中使用
字符串
str_starts_with
str_starts_with
检查给定的字符串是否以指定的(组)字符开头。
str_starts_with('a', 'abc'); // returns true str_starts_with('b', 'abc'); // returns false
str_ends_with
str_ends_with
检查给定的字符串是否以指定的(组)字符结尾。
str_ends_with('de', 'abcde'); // returns true str_ends_with('cd', 'abcde'); // returns false
- 自定义
默认情况下,有多种字符集和别名可用,但如果你喜欢,也可以添加自己的。你所需要做的只是配置Randomizr配置文件。
$ php artisan randomizr:publish
配置文件将发布到app/config/packages/luminol/randomizr/randomizr.php
。
注意:我为这个操作创建了一个自定义Artisan命令,以保持L4和L5在发布资源时的相同性。
3.1. 注册自定义字符集
注册自定义字符集非常简单。只需添加
'charsets' => array( ... 'mycharsetname' => 'characters_for_this_charset' ),
重要:字符集名称应该只包含一个单词。不要使用蛇形或驼峰命名法(这将破坏组合功能)。
3.2. 注册自定义别名
自定义别名有更多的配置选项:它使用管道符来分隔不同的组合组件。这些组件可以是原始的string
、charset
或alias
,并且可以使用基本的字符串函数进行修改。
为了说明这一切,让我们假设你需要生成一个随机ID,其中可以包含字母字符(大小写)、破折号和'.'。
组合字符集和/或别名
上面的例子告诉我们ID别名可能包含字母字符(这是一个别名)和破折号(这是一个字符集)。因此,为了在id
别名中组合它们
'aliases' => array( ... 'id' => "alpha|dash" ),
Randomizr将自动将它们解析为别名和字符集。
将原始字符串添加到别名中
在我们的例子中,我们还需要添加'.'(点)。它存在于punctuation
字符集中,但这个字符集中的其他所有字符都不允许在ID别名中使用。
我们可以将单个点注册为字符集,但也可以将其作为原始字符串传递给别名。只需用单引号
包裹它即可
'aliases' => array( ... 'id' => "alpha|dash|'.'" ),
如果你想向别名中添加原始数字,不需要用单引号包裹(尽管这样做也可以)
'aliases' => array( ... 'id' => "consonant|6", // the result will be 'aeijoy6' ),
使用简单的字符串函数
别名还允许使用基本的字符串函数。例如,你可能只想使用大写版本的special
字符集。在这种情况下,你可以使用method:arg1,arg2
格式来分隔函数名及其参数
'aliases' => array( ... 'uspecial' => "strtoupper:special" ),
函数的arguments
可以是charset
、alias
甚至是原始的string
(用单引号包裹)
'aliases' => array( ... 'notnull' => "str_replace:0,'',num", // results in '123456789' 'custom' => "my_custom_function:'arg1',num" ),