Skip to content

Instantly share code, notes, and snippets.

@syofyanzuhad
Created February 21, 2022 09:12
Show Gist options
  • Save syofyanzuhad/8e84699fe160d42da95206ad8fa342a4 to your computer and use it in GitHub Desktop.
Save syofyanzuhad/8e84699fe160d42da95206ad8fa342a4 to your computer and use it in GitHub Desktop.
Controller to handle API for your enum
<?php
namespace App\Http\Controllers;
use BenSampo\Enum\Enum;
use Illuminate\Http\Request;
class EnumController extends Controller
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function __invoke(Request $request, $enum)
{
$enumType = ucwords(str_replace('-', ' ', $enum));
//remove all white spaces
$enumType = preg_replace('/\s+/', '', $enumType);
//check if the enum type exists
$enumClass = "App\Enums\\$enumType";
if (! class_exists($enumClass)) {
return response()->json([
'message' => $enumType.' Enum type not found',
], 404);
}
// check if the enum type is a class
if (! is_subclass_of($enumClass, Enum::class)) {
return response()->json([
'message' => $enumType.' Enum type is not a class',
], 404);
} else {
$enumValues = [];
foreach (call_user_func("App\Enums\\{$enumType}::getValues") as $value) {
$enumValues[] = [
'value' => $value,
];
}
return $this->successResponse($enumValues);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment