Skip to content

snadnee/packages-enums

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Enums

This package provides a simple way to use enums in Laravel.

Installation

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-enums

Available commands:

Create an enum

php artisan make:enum {name}

Publish stubs

php artisan snadnee:enums-stubs

Available enum traits

Snadnee\Enums\Modes\EnumToArray

  • names() - returns an array of enum names
  • values() - returns an array of enum values
  • array() - returns an array of enum names and values

Snadnee\Enums\Modes\LocalizedEnumTrait

  • translate(\Snadnee\Enum\Modes\LocalizedEnumInterface $enum) - returns a translated enum name
  • translateAll() - returns an array of translated enum names and values
  • asSelectArray() - returns an array of translated enum names and values
  • hasValue(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

Translations

String returned from getTranslationKey() method is prefixed with enums. used as a translation key.

Using of attributes

<?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);
    }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages