Static data enum provider. This module provide list of enums that may used by application.
composer require iqomp/enum
php bin/hyperf.php vendor:publish iqomp/enum
To add new enum data or modify exists one, modify file on
/config/autoload/enum.php
to return data as below:
<?php
return [
'enums' => [
'gender' => [
'0' => 'Unknown',
'1' => 'Male',
'2' => 'Female',
'3' => 'Non-Binary'
]
]
];
Or if you prefer to use file ConfigProvider.php
, add data as below:
<?php
// ...
class ConfigProvider
{
public function __invoke()
{
return [
'enum' => [
'enums' => [
'gender' => [
'0' => 'Unknown',
'1' => 'Male',
'2' => 'Female',
'3' => 'Non-Binary'
]
]
]
];
}
}
Make sure to update your composer.json
file to let hyperf identify the config file:
"extra": {
"hyperf": {
"config": "Vendor\\Module\\ConfigProvider"
}
}
If you want the enum label to be translated, make sure to install module
hyperf/translation. Add new translation
on folder storage/languages/vendor/enum/{locale}/{enum-name}.php
.
<?php
// gender.php
return [
'Unknown' => 'Unknown',
'Female' => 'Female',
'Male' => 'Male',
'Non-Binary' => 'Non Binary'
];
Use class Iqomp\Enum\Enum
to create enum object with specified value.
<?php
use Iqomp\Enum\Enum;
// $enum = new Enum('gender', '1', 'int');
$enum = new Enum('std-gender', '2', 'str');
$enum->value;
$enum->options;
$enum->label;
List of method defined by this class object:
Create new Enum object. This method accept parameters:
name::string
The name of enum datalist.value::int|str
The value of enum item.type::string
Convert provided value asint
orstr
.
Get enum data property, accepted name are value
, label
, and options
.
Return string enum label.
Convert the enum to json_encode ready parameter.
If you're using validator iqomp/validator
for your object or form validator, this module add new form validator rule named
enum
to validate if user provided data is in registered enum.
Make sure user provided value is in registered enum, the value of user posted data can be single int/str or array of it.
// ...
'rules' => [
'enum' => 'std-gender'
]
// ...
Run below script to run psr-12 linter:
composer lint
If you're using formatter iqomp/formatter
for your object formatter, this module add new object format type named enum
and multiple-enum
that can be use to convert object property value to enum
object.
Convert current object property value to Iqomp\Enum\Enum
object.
// ...
'/field/' => [
'type' => 'enum',
'enum' => 'std-gender'
]
// ...
Convert current object property value to array of Iqomp\Enum\Enum
with custom
separator:
// ...
'/field/' => [
'type' => 'multiple-enum',
'enum' => 'std-gender',
'separator' => ',' // PHP_EOL, 'json'
]
// ...
If property separator
is not set, PHP_EOL
will be used. It also accept
separator 'json'
that will use json_decode
for separation. If the value of
object property is already array, no separation/explode will used.