# Laravel Enums API Response
###### tags: `PHP` `Laravel`
## Base Enum
#### Request validation
```php=
enum ResponseEnum: int
{
case SUCCESS = 200;
case NO_CONTENT = 204;
case MOVE_PERMANENTLY = 301;
case FOUND = 302;
case UNAUTHORIZED = 401;
case FORBIDDEN = 403;
case NOT_FOUND = 404;
case METHOD_NOT_ALLOWED = 405;
case NOT_ACCEPTABLE = 406;
case CONFLICT = 409;
case CONTENT_TOO_LONG = 413;
case UNPROCESSABLE_ENTITY = 422;
case TOO_MANY_REQUESTS = 429;
case SERVER_ERROR = 500;
/**
* API Exception
* @param string|int|null $code
* @param string|null $msg
* @return JsonResponse
*/
public static function exception(string|int $code = null, ?string $msg = null): JsonResponse
{
return match ((int)$code) {
204 => self::NO_CONTENT->toJson($msg),
301 => self::MOVE_PERMANENTLY->toJson($msg),
302 => self::FOUND->toJson($msg),
401 => self::UNAUTHORIZED->toJson($msg),
403 => self::FORBIDDEN->toJson($msg),
404 => self::NOT_FOUND->toJson($msg),
405 => self::METHOD_NOT_ALLOWED->toJson($msg),
406 => self::NOT_ACCEPTABLE->toJson($msg),
409 => self::CONFLICT->toJson($msg),
422 => self::UNPROCESSABLE_ENTITY->toJson($msg),
429 => self::TOO_MANY_REQUESTS->toJson($msg),
default => self::SERVER_ERROR->toJson($msg),
};
}
/**
* API 回傳
* @param string|null $msg
* @param $data
* @return JsonResponse
*/
public function toJson(?string $msg = null, $data = null): JsonResponse
{
return response()->json([
'status' => $this->value,
'data' => $data,
'msg' => $this->value >= 500 && !config('app.debug') ? 'Server Error' : $msg
]);
}
/**
* Test 回傳
*
* @param string|null $msg
* @param null $data
* @return array
*/
public function toArray(?string $msg = null, $data = null): array
{
return [
'status' => $this->value,
'data' => $data,
'msg' => $this->value >= 500 && !config('app.debug') ? 'Server Error' : $msg
];
}
}
```
### API Usage
```php=
try {
return Response::SUCCESS->toJson('message', $data);
} catch (Exception $e) {
return Response::exception($e->getCode(), $e->getMessage());
}
```