Sometimes you don't want your code to fail, yet you want to know when an enum is tried to be instantiated, but failed. This allows you to do so.
use Henzeb\Enumhancer\Concerns\Reporters;
enum YourEnum: string {
use Reporters;
case ENUM = 'your_enum';
case ENUM2 = 'your_other_enum';
}
use Henzeb\Enumhancer\Contracts\Reporter;
class YourReporter implements Reporter {
public function report(
string $enum,
?string $key,
?BackedEnum $context
) :void {
// TODO: Implement report() method.
}
}
/** in the root of your project (or ServiceProvider in case of Laravel) */
Henzeb\Enumhancer\Helpers\EnumReporter::set(new YourReporter());
Henzeb\Enumhancer\Helpers\EnumReporter::set(YourReporter::class);
/** getOrReport */
YourEnum::getOrReport('ENUM'); // will just return the enum
YourEnum::getOrReport('your_enum'); // will just return the enum
YourEnum::getOrReport('unknown'); // will return null and call the Reporter
YourEnum::getOrReportArray(
['ENUM', 'your_other_enum']
); // will just return the enums
YourEnum::getOrReportArray(
['ENUM', 'unknown']
); // will return [YourEnum::ENUM] and call the Reporter for 'unknown'
Note: each method accepts a BackedEnum
so you can give a bit more context when
logging.
You can also set a reporter for an enum by overriding the reporter
method.
Enumhancer will use that one instead
use Henzeb\Enumhancer\Contracts\Reporter;
enum YourEnum: string {
use Reporters;
case ENUM = 'your_enum';
case ENUM2 = 'your_other_enum';
public function reporter(): Reporter
{
return YourCustomReporter();
}
}
For laravel, there is out of the box support, which is automatically loaded see README.
Out of the box, the reporter will report to your configured default channel,
but you can change the channel and the LogLevel
.
Note: You don't need to disable autodiscovery for this, as it will override the configuration.
use Henzeb\Enumhancer\Enums\LogLevel;
use Henzeb\Enumhancer\Helpers\EnumReporter;
EnumReporter::laravel(LogLevel::Alert); // alerts to configured channel
EnumReporter::laravel(null, 'stack'); // notices to stack
EnumReporter::laravel(null, 'stack', 'daily'); // notices to stack and daily