This package provides a simple way to use enums in Laravel.
To composer.json into repositories section add:
{
"snadnee-enums": {
"type": "vcs",
"name": "snadnee/packages-enums",
"url": "git@github.com:snadnee/packages-enums.git",
"branch": "main"
}
} Then run:
composer require snadnee/packages-enumsphp artisan make:enum {name}
php artisan snadnee:enums-stubs
Snadnee\Enums\Modes\EnumToArray
names()- returns an array of enum namesvalues()- returns an array of enum valuesarray()- returns an array of enum names and values
Snadnee\Enums\Modes\LocalizedEnumTrait
translate(\Snadnee\Enum\Modes\LocalizedEnumInterface $enum)- returns a translated enum nametranslateAll()- returns an array of translated enum names and valuesasSelectArray()- returns an array of translated enum names and valueshasValue(string $value)- returns true if the enum has the given value
Snadnee\Enums\Modes\GetsAttributes
getAttributeProperty(string $enumName, string $attribute, string $property) - returns the value of the given property
String returned from getTranslationKey() method is prefixed with enums. used as a translation key.
<?php
namespace App\Enums\Attributes;
use Attribute;
#[Attribute]
class NumberOfInterestPaymentsInYear
{
public function __construct(
public int $numberOfInterestPaymentsInYear,
) {
}
}<?php
namespace App\Enums;
use App\Enums\Attributes\NumberOfInterestPaymentsInYear;
use Snadnee\Enums\Modes\EnumToArray;
use Snadnee\Enums\Modes\GetsAttributes;
use Snadnee\Enums\Modes\LocalizedEnumInterface;
use Snadnee\Enums\Modes\LocalizedEnumTrait;
enum InterestPaymentsPeriodicity: string implements LocalizedEnumInterface
{
use LocalizedEnumTrait, EnumToArray, GetsAttributes;
#[NumberOfInterestPaymentsInYear(1)]
case ANNUALLY = 'annually';
#[NumberOfInterestPaymentsInYear(2)]
case SEMIANNUALLY = 'semiannually';
#[NumberOfInterestPaymentsInYear(4)]
case QUARTERLY = 'quarterly';
#[NumberOfInterestPaymentsInYear(12)]
case MONTHLY = 'monthly';
public static function getTranslationKey(): string
{
return 'emissions.interest_payments_periodicity';
}
public static function getNumberOfInterestPaymentsInYear(self $enum): int
{
return self::getAttributeProperty($enum->name, NumberOfInterestPaymentsInYear::class, 'numberOfInterestPaymentsInYear');
}
public static function getInterestIntervalInMonths(self $periodicity): int
{
// Number of months in year (12) / number of interest payments in year
return 12 / self::getNumberOfInterestPaymentsInYear($periodicity);
}
}