exylon / fuse
Laravel 工具集合
Requires
- php: >=7.0.0
- laravel/framework: 5.5.*
Requires (Dev)
- jenssegers/agent: ^2.5
- mockery/mockery: ~1.0
- orchestra/database: ^3.5
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~6.4
- torann/geoip: ^1.0
Suggests
- jenssegers/agent: Add agent details on the Request instance
- torann/geoip: Add geoip details on the Request instance
This package is not auto-updated.
Last update: 2024-09-29 04:31:23 UTC
README
该软件仍在积极开发中。使用时请谨慎。
需要具备一定的 Laravel 和软件设计模式知识
Laravel 工具集合
安装
composer require exylon/fuse:dev-master
Artisan 辅助工具
php artisan make:subscriber
根据 Laravel 订阅者创建新的 Subscriber 类
基本用法
$ php artisan make:subscriber AuthEventsSubscriber --event="Illuminate\\Auth\\Events\\Login" --event="Illuminate\\Auth\\Events\\Logout"
php artisan make:repository
创建新的 repository 类
基本用法
$ php artisan make:repository User --no-interface
php artisan make:service
创建新的 service 类。
基本用法
$ php artisan make:service UserService -r=UserRepository --crud
辅助函数
str_replace_assoc(array $pairs, $subject)
使用键值对(关联数组)进行字符串替换。
validate(array $data, array $rules)
等同于 \Validator::validate($data, $rules)
str_random_hex($length)
生成指定长度的随机十六进制字符串。
示例: $var = str_random_hex(10) //ffeb09ed56
str_random_int($length, $min = 0, $pad = '0')
生成随机数字字符串。如果生成的数字字符串长度小于 $length,则使用 $pad 进行填充。
示例: $var = str_random_int(5) //01467
proper_case($str,$delimiters = '_')
将字符串转换为正确的标题格式
示例
$var = proper_case('lorem_ipsum_dolor') // Lorem Ipsum Dolor $var = proper_case('lorem_ipsum-dolor') // Lorem Ipsum-Dolor $var = proper_case('lorem_ipsum-dolor',['_','-']) // Lorem Ipsum Dolor
辅助特性类
\Exylon\Fuse\Support\Attributes
增强型关联数组。将普通关联数组转换为标准对象
$arr = new Attributes([ 'red' => 'apple', 'orange' => 'orange', 'yellow' => [ 'mangoes' => 'foo', 'pear' => 'bar' ] ]); echo $arr['red']; // "apple" echo $arr->red; // "apple" echo $arr['yellow']['mangoes']; // "foo" echo $arr->yellow->mangoes; // "foo"
处理别名。 注意:当前别名只支持第一层键
$arr = new Attributes([ 'red' => 'apple', 'orange' => 'orange', 'yellow' => [ 'mangoes' => 'foo', 'pear' => 'bar' ] ],[ // 'pula' as an alias for 'red' 'pula' => 'red' ]); echo $arr['red']; // "apple" echo $arr->red; // "apple" echo $arr['pula']; // "apple" echo $arr->pula; // "apple"
Attributes::toJson($options=0)
将属性转换为 JSON
\Exylon\Fuse\Support\Eloquent\CascadeDelete
在 PHP 端启用级联删除。对于多态关系非常有用。
/* * 'Team' model can also have payment methods. That's the reason * PaymentMethod is poloymorphic. */ class Customer extends Model { use CascadeDelete; protected $cascade = [ 'paymentMethods' ]; public function paymentMethods(){ return $this->morphMany(PaymentMethod::class,'owner'); } } ... $customer->delete(); // this will delete all related payment methods
辅助宏
Request::location()
使用 torann/geoip
\Exylon\Fuse\Support\Attributes { #attributes: array [ "ip" => "127.0.0.0" "iso_code" => "PH" "country" => "Philippines" "city" => "Paranaque" "state" => "MNL" "state_name" => "Manila" "postal_code" => "06510" "lat" => 14.471016 "lon" => 121.01476 "timezone" => "Asia/Manila" "continent" => "NA" "currency" => "USD" "default" => true "cached" => false ] #aliases: array [ "country_code" => "iso_code" "latitude" => "lat" "longitude" => "lon" "zip_code" => "postal_code" ] }
Request::agent()
\Exylon\Fuse\Support\Attributes { #attributes: array [ "agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "is_mobile" => false "is_phone" => false "is_tablet" => false "device" => "Macintosh" "is_desktop" => true "platform" => "OS X" "is_robot" => false "robot" => false "browser" => "Chrome" "languages" => array:2 [▶] ] }
Builder::forceMake($attributes)
与 Eloquent 模型的 forceCreate 相同,此方法创建模型实例而不进行持久化,避免 MassAssignmentException。 注意:请确保预先验证了属性。
$user = User::forceMake(['name'=>'John Doe']);
FuseSanitizer 门面
根据规则清理数据。
内联规则
$data = [ 'email' => ' EXAMPLE@EXAMPLE.COM ' ]; $data = FuseSanitizer::sanitize($data,[ '*' => 'trim::string', // Wildcard 'email' => 'strtolower' // Applicable only fields named 'email' ]); // ['email' => 'example@example.com']
“email”规则仅适用于名为“email”的字段。在此情况下,如果数据中存在“email”字段,则将调用 strtolower。
* 表示通配符,使其适用于“任何”字段,但请注意,包含的规则是 trim::string。规则分为三个部分 - 函数、参数、数据类型 - 由冒号(:)分隔;参数由逗号(,)分隔。默认情况下,数据类型将假设为字符串。在我们的示例中,对于函数 trim 我们不需要任何参数,但我们需要提供一个数据类型,使其仅适用于 string 类型的数据。可用的数据类型有 string、array、int、float 和 double。
内联规则与全局规则
示例
FuseSanitizer::setGlobalRules([ 'email' => 'trim' ]); $data = [ 'email' => ' EXAMPLE@EXAMPLE.COM ' ]; $data = FuseSanitizer::sanitize($data,[ 'email' => 'strtolower' ]); // ['email' => 'example@example.com']
规则的优先级顺序如下
- 全局通配符
- 全局规则
- 内联通配符
- 内联规则
如果您设置了全局规则,则内联规则是可选的。示例
FuseSanitizer::setGlobalRules([ 'email' => ['trim','strtolower'] ]); $data = [ 'email' => ' EXAMPLE@EXAMPLE.COM ' ]; $data = FuseSanitizer::sanitize($data); // ['email' => 'example@example.com']
单个值的消毒
示例
$email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ',['trim','strtolower']); // 'example@example.com'
规则集格式
使用管道(|)分隔的规则
$email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ','trim|strtolower'); // 'example@example.com'
使用数组
$email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ', ['trim','strtolower']); // 'example@example.com'
使用回调函数
$email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ', ['trim',function($value){ return strtolower($value); }]); // 'example@example.com'
使用类/方法对
$email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ', ['trim','App\\Support\\SanitizerHelper@toLower']); // 'example@example.com'
通过 FuseSanitizer::register 扩展回调函数
FuseSanitizer::register('tolower',function($value){ return strtolower($value); }); $email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ', ['trim','tolower']); // 'example@example.com'
FuseSanitizer::register('tolower','App\\Support\\SanitizerHelper@toLower'); $email = FuseSanitizer::sanitizeValue(' EXAMPLE@EXAMPLE.COM ', ['trim','tolower']); // 'example@example.com'