emreyarligan / enum-concern
一个用于轻松处理 Laravel 集合中枚举的 PHP 包 📦 ✨
Requires
- php: >=8.1
- illuminate/collections: ^8.65 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- phpunit/phpunit: ^10.0
README
EnumConcern 是一个 PHP 包,旨在通过一系列便捷的方法增强 PHP 枚举功能的利用。此包包含一个 Trait 文件,它允许轻松处理枚举。
由Laravel 集合提供支持,让您感到宾至如归。 🧡
安装
要安装 EnumConcern 包,请通过 composer 引入
composer require emreyarligan/enum-concern
现在,您可以在您的枚举中使用 EnumConcern。
namespace App\Enums; use EmreYarligan\EnumConcern\EnumConcern; enum TestEnum: string { use EnumConcern; ... ... }
方法
基本用法
您可以在文档下面的 所有方法的示例 部分查看更多详细信息。
namespace App\Enums; use EmreYarligan\EnumConcern\EnumConcern; enum Color: string { use EnumConcern; case RED = "Red"; case GREEN = "Green"; case BLUE = "Blue"; public function translateToTurkish(): string { return match ($this) { self::RED => 'Kırmızı', self::GREEN => 'Yeşil', self::BLUE => 'Mavi', }; } } Color::all(); // Result: Illuminate\Support\Collection (7) [ // [0] => 'Red', // [1] => 'Green', // [2] => 'Blue // ] Color::all('translateToTurkish'); // Result: Illuminate\Support\Collection (7) [ // [0] => 'Kırmızı', // [1] => 'Yeşil', // [2] => 'Mavi // ] Color::has('Purple'); // false Color::has('Mavi','translateToTurkish'); // true
所有方法的示例
步骤 1: 创建您的枚举
创建一个枚举类并使用 EnumConcern Trait。
以下是一个示例。我为示例创建了一个关于水果的 trait,不是很巧妙吗? 😛
namespace App\Enums; use EmreYarligan\EnumConcern\EnumConcern; enum Fruits: int { use EnumConcern; case BANANA = 1; case STRAWBERRY = 2; case CHERRY = 3; case WATERMELON = 4; case ORANGE = 5; case KIWI = 6; case APPLE = 7; // Custom methods public function emojis(): string { return match ($this) { self::BANANA => '🍌', self::STRAWBERRY => '🍓', self::CHERRY => '🍒', self::WATERMELON => '🍉', self::ORANGE => '🍊', self::KIWI => '🥝', self::APPLE => '🍎', }; } public function names(): string { return match ($this) { self::BANANA => 'Banana', self::STRAWBERRY => 'Strawberry', self::CHERRY => 'Cherry', self::WATERMELON => 'Watermelon', self::ORANGE => 'Orange', self::KIWI => 'Kiwi', self::APPLE => 'Apple', }; } }
注意:此 README 包含适用于 int
和 string
类型枚举值的示例。EnumConcern Trait 以相同的方式处理两种类型的枚举值。这允许您在项目中同时使用 EnumConcern Trait 来处理这两种类型的枚举,并简化枚举值的处理。
以下是字符串枚举示例
namespace App\Enums; use EmreYarligan\EnumConcern\EnumConcern; enum Fruits: string { use EnumConcern; case BANANA = "Delicious Banana"; case STRAWBERRY = 'Red Strawberry'; case CHERRY = "Sweet Cherry"; case WATERMELON = "juicy watermelon"; case ORANGE = "Tasty Orange"; case KIWI = "Green Kiwi"; case APPLE = "Crunchy Apple"; }
步骤 2: 使用 EnumConcern 处理枚举
EnumConcern 提供了几个便捷的方法来处理您的枚举值。
all() 方法
获取所有枚举值作为 Collection(空 $method)
Fruits::all();
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => 1
"STRAWBERRY" => 2
"CHERRY" => 3
"WATERMELON" => 4
"ORANGE" => 5
"KIWI" => 6
"APPLE" => 7
]
}
使用 'emojis' 方法获取所有枚举值作为 Collection
Fruits::all('emojis');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => "🍌"
"STRAWBERRY" => "🍓"
"CHERRY" => "🍒"
"WATERMELON" => "🍉"
"ORANGE" => "🍊"
"KIWI" => "🥝"
"APPLE" => "🍎"
]
}
使用 'names' 方法获取所有枚举值作为 Collection。
Fruits::all('names');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => "Banana"
"STRAWBERRY" => "Strawberry"
"CHERRY" => "Cherry"
"WATERMELON" => "Watermelon"
"ORANGE" => "Orange"
"KIWI" => "Kiwi"
"APPLE" => "Apple"
]
}
has() 方法
检查特定值是否存在(空 $method)
Fruits::has(1); // Result: true
使用 'emojis' 方法检查特定值是否存在
Fruits::has('🍉', 'emojis'); // Result: true
使用 'names' 方法检查特定值是否存在
Fruits::has('Coconut', 'names'); // Result: false
keyByValue() 方法
获取特定值的案例(键/名称)(空 $method)
Fruits::keyByValue(3); // Result: "CHERRY"
使用 'emojis' 方法获取特定值的案例(键/名称)
Fruits::keyByValue('🥝', 'emojis'); // Result: "KIWI"
使用 'names' 方法获取特定值的案例(键/名称)
Fruits::keyByValue('Orange', 'names'); // Result: "ORANGE"
toJson() 方法
将所有值转换为 JSON 字符串(空 $method)
Fruits::toJson(); // Result: "{"BANANA":1,"STRAWBERRY":2,"CHERRY":3,"WATERMELON":4,"ORANGE":5,"KIWI":6,"APPLE":7}"
使用 'emojis' 方法将所有值转换为 JSON 字符串
Fruits::toJson('emojis',JSON_UNESCAPED_UNICODE); // Result: "{"BANANA":"🍌","STRAWBERRY":"🍓",...,"APPLE":"🍎"}"
使用 'names' 方法将所有值转换为 JSON 字符串
Fruits::toJson('names'); // Result: "{"BANANA":"Banana","STRAWBERRY":"Strawberry","CHERRY":"Cherry","WATERMELON":"Watermelon","ORANGE":"Orange","KIWI":"Kiwi","APPLE":"Apple"}"
toArray() 方法
将所有值转换为数组(空 $method)
Fruits::toArray();
结果
array:7 [
"BANANA" => 1
"STRAWBERRY" => 2
"CHERRY" => 3
"WATERMELON" => 4
"ORANGE" => 5
"KIWI" => 6
"APPLE" => 7
]
使用 'emojis' 方法将所有值转换为数组
Fruits::toArray('emojis');
结果
array:7 [
"BANANA" => "🍌"
"STRAWBERRY" => "🍓"
"CHERRY" => "🍒"
"WATERMELON" => "🍉"
"ORANGE" => "🍊"
"KIWI" => "🥝"
"APPLE" => "🍎"
]
使用 'names' 方法将所有值转换为数组
Fruits::toArray('names');
结果
array:7 [
"BANANA" => "Banana"
"STRAWBERRY" => "Strawberry"
"CHERRY" => "Cherry"
"WATERMELON" => "Watermelon"
"ORANGE" => "Orange"
"KIWI" => "Kiwi"
"APPLE" => "Apple"
]
toKeyValueCollection() 方法
将所有值转换为键值格式作为 Collection(空 $method)
Fruits::toKeyValueCollection();
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"key" => "BANANA"
"value" => 1
]
"STRAWBERRY" => array:2 [
"key" => "STRAWBERRY"
"value" => 2
]
"CHERRY" => array:2 [
"key" => "CHERRY"
"value" => 3
]
"WATERMELON" => array:2 [
"key" => "WATERMELON"
"value" => 4
]
"ORANGE" => array:2 [
"key" => "ORANGE"
"value" => 5
]
"KIWI" => array:2 [
"key" => "KIWI"
"value" => 6
]
"APPLE" => array:2 [
"key" => "APPLE"
"value" => 7
]
]
}
使用 keyAttributeName 和 valueAttributeName 参数将所有值转换为键值格式作为 Collection(空 $method)
Fruits::toKeyValueCollection(keyAttributeName: 'foo', valueAttributeName: 'bar');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"foo" => "BANANA"
"bar" => 1
]
"STRAWBERRY" => array:2 [
"foo" => "STRAWBERRY"
"bar" => 2
]
"CHERRY" => array:2 [
"foo" => "CHERRY"
"bar" => 3
]
"WATERMELON" => array:2 [
"foo" => "WATERMELON"
"bar" => 4
]
"ORANGE" => array:2 [
"foo" => "ORANGE"
"bar" => 5
]
"KIWI" => array:2 [
"foo" => "KIWI"
"bar" => 6
]
"APPLE" => array:2 [
"foo" => "APPLE"
"bar" => 7
]
]
}
使用 'emojis' 方法将所有值转换为键值格式作为 Collection
Fruits::toKeyValueCollection('emojis');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"key" => "BANANA"
"value" => "🍌"
]
"STRAWBERRY" => array:2 [
"key" => "STRAWBERRY"
"value" => "🍓"
]
"CHERRY" => array:2 [
"key" => "CHERRY"
"value" => "🍒"
]
"WATERMELON" => array:2 [
"key" => "WATERMELON"
"value" => "🍉"
]
"ORANGE" => array:2 [
"key" => "ORANGE"
"value" => "🍊"
]
"KIWI" => array:2 [
"key" => "KIWI"
"value" => "🥝"
]
"APPLE" => array:2 [
"key" => "APPLE"
"value" => "🍎"
]
]
}
使用 'emojis' 方法和使用 keyAttributeName 和 valueAttributeName 参数将所有值转换为键值格式作为 Collection
Fruits::toKeyValueCollection('emojis','foo','bar');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"foo" => "BANANA"
"bar" => "🍌"
]
"STRAWBERRY" => array:2 [
"foo" => "STRAWBERRY"
"bar" => "🍓"
]
"CHERRY" => array:2 [
"foo" => "CHERRY"
"bar" => "🍒"
]
"WATERMELON" => array:2 [
"foo" => "WATERMELON"
"bar" => "🍉"
]
"ORANGE" => array:2 [
"foo" => "ORANGE"
"bar" => "🍊"
]
"KIWI" => array:2 [
"foo" => "KIWI"
"bar" => "🥝"
]
"APPLE" => array:2 [
"foo" => "APPLE"
"bar" => "🍎"
]
]
}
使用 'names' 方法将所有值转换为键值格式作为 Collection
Fruits::toKeyValueCollection('names');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"key" => "BANANA"
"value" => "Banana"
]
"STRAWBERRY" => array:2 [
"key" => "STRAWBERRY"
"value" => "Strawberry"
]
"CHERRY" => array:2 [
"key" => "CHERRY"
"value" => "Cherry"
]
"WATERMELON" => array:2 [
"key" => "WATERMELON"
"value" => "Watermelon"
]
"ORANGE" => array:2 [
"key" => "ORANGE"
"value" => "Orange"
]
"KIWI" => array:2 [
"key" => "KIWI"
"value" => "Kiwi"
]
"APPLE" => array:2 [
"key" => "APPLE"
"value" => "Apple"
]
]
}
使用 'names' 方法和使用 keyAttributeName 和 valueAttributeName 参数将所有值转换为键值格式作为 Collection。
Fruits::toKeyValueCollection('names', 'foo', 'bar');
结果
Illuminate\Support\Collection {
#items: array:7 [
"BANANA" => array:2 [
"foo" => "BANANA"
"bar" => "Banana"
]
"STRAWBERRY" => array:2 [
"foo" => "STRAWBERRY"
"bar" => "Strawberry"
]
"CHERRY" => array:2 [
"foo" => "CHERRY"
"bar" => "Cherry"
]
"WATERMELON" => array:2 [
"foo" => "WATERMELON"
"bar" => "Watermelon"
]
"ORANGE" => array:2 [
"foo" => "ORANGE"
"bar" => "Orange"
]
"KIWI" => array:2 [
"foo" => "KIWI"
"bar" => "Kiwi"
]
"APPLE" => array:2 [
"foo" => "APPLE"
"bar" => "Apple"
]
]
}
toKeyValueArray() 方法
将所有值转换为键值格式的数组(空 $method)
Fruits::toKeyValueArray();
结果
array:7 [
0 => array:2 [
"key" => "BANANA"
"value" => 1
]
1 => array:2 [
"key" => "STRAWBERRY"
"value" => 2
]
2 => array:2 [
"key" => "CHERRY"
"value" => 3
]
3 => array:2 [
"key" => "WATERMELON"
"value" => 4
]
4 => array:2 [
"key" => "ORANGE"
"value" => 5
]
5 => array:2 [
"key" => "KIWI"
"value" => 6
]
6 => array:2 [
"key" => "APPLE"
"value" => 7
]
]
使用 keyAttributeName 和 valueAttributeName 参数将所有值转换为键值格式的数组(空 $method)
Fruits::toKeyValueArray(keyAttributeName: 'foo', valueAttributeName: 'bar');
结果
array:7 [
0 => array:2 [
"foo" => "BANANA"
"bar" => 1
]
1 => array:2 [
"foo" => "STRAWBERRY"
"bar" => 2
]
2 => array:2 [
"foo" => "CHERRY"
"bar" => 3
]
3 => array:2 [
"foo" => "WATERMELON"
"bar" => 4
]
4 => array:2 [
"foo" => "ORANGE"
"bar" => 5
]
5 => array:2 [
"foo" => "KIWI"
"bar" => 6
]
6 => array:2 [
"foo" => "APPLE"
"bar" => 7
]
]
使用 'emojis' 方法将所有值转换为键值格式的数组
Fruits::toKeyValueArray('emojis');
结果
array:7 [
0 => array:2 [
"key" => "BANANA"
"value" => "🍌"
]
1 => array:2 [
"key" => "STRAWBERRY"
"value" => "🍓"
]
2 => array:2 [
"key" => "CHERRY"
"value" => "🍒"
]
3 => array:2 [
"key" => "WATERMELON"
"value" => "🍉"
]
4 => array:2 [
"key" => "ORANGE"
"value" => "🍊"
]
5 => array:2 [
"key" => "KIWI"
"value" => "🥝"
]
6 => array:2 [
"key" => "APPLE"
"value" => "🍎"
]
]
使用 'emojis' 方法,并带有 keyAttributeName 和 valueAttributeName 参数,将所有值转换为键值格式的数组(空 $method)
Fruits::toKeyValueArray('emojis','foo','bar');
结果
array:7 [
0 => array:2 [
"foo" => "BANANA"
"bar" => "🍌"
]
1 => array:2 [
"foo" => "STRAWBERRY"
"bar" => "🍓"
]
2 => array:2 [
"foo" => "CHERRY"
"bar" => "🍒"
]
3 => array:2 [
"foo" => "WATERMELON"
"bar" => "🍉"
]
4 => array:2 [
"foo" => "ORANGE"
"bar" => "🍊"
]
5 => array:2 [
"foo" => "KIWI"
"bar" => "🥝"
]
6 => array:2 [
"foo" => "APPLE"
"bar" => "🍎"
]
]
使用 'names' 方法将所有值转换为键值格式的数组
Fruits::toKeyValueArray('names');
结果
array:7 [
0 => array:2 [
"key" => "BANANA"
"value" => "Banana"
]
1 => array:2 [
"key" => "STRAWBERRY"
"value" => "Strawberry"
]
2 => array:2 [
"key" => "CHERRY"
"value" => "Cherry"
]
3 => array:2 [
"key" => "WATERMELON"
"value" => "Watermelon"
]
4 => array:2 [
"key" => "ORANGE"
"value" => "Orange"
]
5 => array:2 [
"key" => "KIWI"
"value" => "Kiwi"
]
6 => array:2 [
"key" => "APPLE"
"value" => "Apple"
]
]
使用 'names' 方法,并带有 keyAttributeName 和 valueAttributeName 参数,将所有值转换为键值格式的数组(空 $method)
Fruits::toKeyValueArray('names','foo','bar');
结果
array:7 [
0 => array:2 [
"foo" => "BANANA"
"bar" => "Banana"
]
1 => array:2 [
"foo" => "STRAWBERRY"
"bar" => "Strawberry"
]
2 => array:2 [
"foo" => "CHERRY"
"bar" => "Cherry"
]
3 => array:2 [
"foo" => "WATERMELON"
"bar" => "Watermelon"
]
4 => array:2 [
"foo" => "ORANGE"
"bar" => "Orange"
]
5 => array:2 [
"foo" => "KIWI"
"bar" => "Kiwi"
]
6 => array:2 [
"foo" => "APPLE"
"bar" => "Apple"
]
]
randomValue() 方法
从值的集合中获取一个随机值(空 $method)
Fruits::randomValue(); // Result: int(4)
使用 'emojis' 方法从值的集合中获取一个随机值
Fruits::randomValue('emojis'); // Result: string(4) "🍊"
使用 'names' 方法从值的集合中获取一个随机值
Fruits::randomValue('names'); // Result: string(6) "Kiwi"
randomKey() 方法
从值的集合中获取一个随机键(键/名称)
Fruits::randomKey(); // Result: string(7) "KIWI"
only() 方法
获取某些键的值作为一个集合(空 $method)
Fruits::only(['STRAWBERRY','CHERRY','WATERMELON','ORANGE']);
结果
Illuminate\Support\Collection {
#items: array:4 [
"STRAWBERRY" => 2
"CHERRY" => 3
"WATERMELON" => 4
"ORANGE" => 5
]
}
使用 'emojis' 方法获取某些键的值作为一个集合
Fruits::only(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'emojis');
结果
Illuminate\Support\Collection {
#items: array:4 [
"STRAWBERRY" => "🍓"
"CHERRY" => "🍒"
"WATERMELON" => "🍉"
"ORANGE" => "🍊"
]
}
使用 'names' 方法获取某些键的值作为一个集合
Fruits::only(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'names');
结果
Illuminate\Support\Collection {
#items: array:4 [
"STRAWBERRY" => "Strawberry"
"CHERRY" => "Cherry"
"WATERMELON" => "Watermelon"
"ORANGE" => "Orange"
]
}
onlyAsArray() 方法
获取某些键的值作为一个数组(空 $method)
Fruits::onlyAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE']);
结果
array:4 [
"STRAWBERRY" => 2
"CHERRY" => 3
"WATERMELON" => 4
"ORANGE" => 5
]
使用 'emojis' 方法获取某些键的值作为一个数组
Fruits::onlyAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'emojis');
结果
array:4 [
"STRAWBERRY" => "🍓"
"CHERRY" => "🍒"
"WATERMELON" => "🍉"
"ORANGE" => "🍊"
]
使用 'names' 方法获取某些键的值作为一个数组
Fruits::onlyAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'names');
结果
array:4 [
"STRAWBERRY" => "Strawberry"
"CHERRY" => "Cherry"
"WATERMELON" => "Watermelon"
"ORANGE" => "Orange"
]
except() 方法
获取除某些键之外的所有值作为一个集合(空 $method)
Fruits::except(['STRAWBERRY','CHERRY','WATERMELON','ORANGE']);
结果
Illuminate\Support\Collection {
#items: array:3 [
"BANANA" => 1
"KIWI" => 6
"APPLE" => 7
]
}
使用 'emojis' 方法获取除某些键之外的所有值作为一个集合
Fruits::except(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'emojis');
结果
Illuminate\Support\Collection {
#items: array:3 [
"BANANA" => "🍌"
"KIWI" => "🥝"
"APPLE" => "🍎"
]
}
使用 'names' 方法获取除某些键之外的所有值作为一个集合
Fruits::except(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'names');
结果
Illuminate\Support\Collection {
#items: array:3 [
"BANANA" => "Banana"
"KIWI" => "Kiwi"
"APPLE" => "Apple"
]
}
exceptAsArray() 方法
获取除某些键之外的所有值作为一个数组(空 $method)
Fruits::exceptAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'])
结果
array:3 [
"BANANA" => 1
"KIWI" => 6
"APPLE" => 7
]
使用 'emojis' 方法获取除某些键之外的所有值作为一个数组
Fruits::exceptAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'emojis');
结果
array:3 [
"BANANA" => "🍌"
"KIWI" => "🥝"
"APPLE" => "🍎"
]
使用 'names' 方法获取除某些键之外的所有值作为一个数组
Fruits::exceptAsArray(['STRAWBERRY','CHERRY','WATERMELON','ORANGE'],'names');
结果
array:3 [
"BANANA" => "Banana"
"KIWI" => "Kiwi"
"APPLE" => "Apple"
]
first() 方法
从枚举中获取第一个值(空 $method)
Fruits::first(); // Result: int(1)
使用 'emojis' 方法从枚举中获取第一个值
Fruits::first('emojis'); // Result: "🍌"
使用 'names' 方法从枚举中获取第一个值
Fruits::first('names'); // Result: "Banana"
last() 方法
从枚举中获取最后一个值(空 $method)
Fruits::last(); // Result: 7
使用 'emojis' 方法从枚举中获取最后一个值
Fruits::last('emojis'); // Result: "🍎"
使用 'names' 方法从枚举中获取最后一个值
Fruits::last('names'); // Result: "Apple"
fromValue() 方法
从一个字符串值创建一个枚举对象。
$greenEnum = Color::fromValue("Green"); // Result: // App\Enums\Color { // +name: "GREEN" // +value: "Green" // }
如果值 "Green" 存在于 Color
枚举中,此方法将返回相应的枚举对象。如果不在此枚举中,则抛出 InvalidArgumentException
。
valueNamePairs() 方法
获取值及其转换后的值的键值对(如果指定了方法)。
$pairs = Color::valueNamePairs('translateToTurkish'); // Result: // Illuminate\Support\Collection { // "Red" => "Kırmızı", // "Green" => "Yeşil", // "Blue" => "Mavi" // }
is() 方法
检查枚举值是否等于给定的值。
$enum = Fruits::BANANA; $enum->is(Fruits::BANANA); // Result: true $enum->is(Fruits::APPLE); // Result: false
isNot() 方法
检查枚举值是否不等于给定的值。
$enum = Fruits::BANANA; $enum->isNot(Fruits::BANANA); // Result: false $enum->isNot(Fruits::APPLE); // Result: true
isAny() 方法
检查枚举值是否等于给定的任何值。
$enum = Fruits::BANANA; $enum->isAny(Fruits::BANANA, Fruits::APPLE); // Result: true $enum->isAny(Fruits::APPLE, Fruits::KIWI); // Result: false
isNotAny() 方法
检查枚举值是否不等于给定的任何值。
$enum = Fruits::BANANA; $enum->isNotAny(Fruits::BANANA, Fruits::APPLE); // Result: false $enum->isNotAny(Fruits::APPLE, Fruits::KIWI); // Result: true
测试
composer test