Have you ever written an enum for something and wanted to have a "nice" version of the enum name, so you write something like this:
<?php
enum Colour: string {
case RED = 'red';
case BLUE = 'blue';
case GREEN = 'green';
public function getTitle()
{
return match($this->value) {
'blue' => "Dark Blue",
'red' => "Blood Red"
default => ucfirst($this->value),
};
}
}
But the problem is, for each new case
, you have to add something to the match
statement, or HOPE that it'll print something out that's legible using the default
fallback?
With this package, you can co-locate titles, and even descriptions, with your enum cases like so:
<?php
enum Colour: string {
use HasAttributeDescriptors;
#[Title('Blood Red')]
#[Description('Our primary highlight colour')]
case RED = 'red';
#[Title('Dark Blue')]
#[Description('Our primary logo colour')]
case BLUE = 'blue';
#[Title('Army Green')]
#[Description('Only use this for background colours.')]
case GREEN = 'green';
}
Neat huh!
You can install the package via composer:
composer require intrfce/enum-attribute-descriptors
Just add the Intrfce\EnumAttributeDescriptors\Concerns\HasAttributeDescriptors
trait to your enum, and you're good to go!
If you have a situation where you don't want to (or can't) define a description or title for each case, you can override
the titleFallback()
and descriptionFallback()
methods on your enum class.
public function titleFallback(): ?string
{
return ucfirst($this->value);
}
public function descriptionFallback(): ?string
{
return 'This option has no description yet';
}
Simple!
The MIT License (MIT). Please see License File for more information.