Add Base Controller

master
sundayenglish 3 weeks ago
parent 2bcc5769bd
commit 57a78a4319
  1. 40
      app/Enums/HttpStatus.php
  2. 60
      app/Http/Controllers/BaseController.php

@ -0,0 +1,40 @@
<?php
namespace App\Enums;
/**
* Custom HTTP status codes enum wrapper.
*/
class HttpStatus
{
public const OK = 200;
public const CREATED = 201;
public const NO_CONTENT = 204;
public const BAD_REQUEST = 400;
public const UNAUTHORIZED = 401;
public const FORBIDDEN = 403;
public const NOT_FOUND = 404;
public const UNPROCESSABLE_ENTITY = 422;
public const INTERNAL_SERVER_ERROR = 500;
/**
* Optional: Get status code description (for logging or debug).
*/
public static function getMessage(int $code): string
{
return match ($code) {
self::OK => 'OK',
self::CREATED => 'Created',
self::NO_CONTENT => 'No Content',
self::BAD_REQUEST => 'Bad Request',
self::UNAUTHORIZED => 'Unauthorized',
self::FORBIDDEN => 'Forbidden',
self::NOT_FOUND => 'Not Found',
self::UNPROCESSABLE_ENTITY => 'Unprocessable Entity',
self::INTERNAL_SERVER_ERROR => 'Internal Server Error',
default => 'Unknown Status',
};
}
}

@ -2,26 +2,22 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Enums\HttpStatus;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller as LaravelController;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class BaseController extends Controller class BaseController extends LaravelController
{ {
use AuthorizesRequests, ValidatesRequests; use AuthorizesRequests, ValidatesRequests;
/** /**
* Return a standardized success JSON response for API requests. * Return a standardized success JSON response for API requests.
*
* @param mixed $data
* @param string $message
* @param int $code
* @return JsonResponse
*/ */
protected function successResponse($data = null, string $message = 'Success', int $code = 200): JsonResponse protected function successResponse($data = null, string $message = 'Success', int $code = HttpStatus::OK): JsonResponse
{ {
return response()->json([ return response()->json([
'status' => 'success', 'status' => 'success',
@ -32,13 +28,8 @@ class BaseController extends Controller
/** /**
* Return a standardized error JSON response for API requests. * Return a standardized error JSON response for API requests.
*
* @param string $message
* @param int $code
* @param array $errors
* @return JsonResponse
*/ */
protected function errorResponse(string $message = 'Error', int $code = 400, array $errors = []): JsonResponse protected function errorResponse(string $message = 'Error', int $code = HttpStatus::BAD_REQUEST, array $errors = []): JsonResponse
{ {
return response()->json([ return response()->json([
'status' => 'error', 'status' => 'error',
@ -49,33 +40,20 @@ class BaseController extends Controller
/** /**
* Automatically respond with JSON or Web view based on request type. * Automatically respond with JSON or Web view based on request type.
*
* @param Request $request
* @param mixed $data
* @param string $message
* @param int $code
* @return JsonResponse|\Illuminate\View\View
*/ */
protected function respond(Request $request, $data = null, string $message = 'Success', int $code = 200) protected function respond(Request $request, $data = null, string $message = 'Success', int $code = HttpStatus::OK)
{ {
if ($request->expectsJson()) { if ($request->expectsJson()) {
return $this->successResponse($data, $message, $code); return $this->successResponse($data, $message, $code);
} }
// You can customize the view as needed.
return view('response.success', compact('data', 'message')); return view('response.success', compact('data', 'message'));
} }
/** /**
* Automatically handle error response for Web or API. * Automatically handle error response for Web or API.
*
* @param Request $request
* @param string $message
* @param array $errors
* @param int $code
* @return JsonResponse|RedirectResponse
*/ */
protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = 400) protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = HttpStatus::BAD_REQUEST)
{ {
if ($request->expectsJson()) { if ($request->expectsJson()) {
return $this->errorResponse($message, $code, $errors); return $this->errorResponse($message, $code, $errors);
@ -88,14 +66,8 @@ class BaseController extends Controller
/** /**
* Redirect the response to a route or return success JSON for API. * Redirect the response to a route or return success JSON for API.
*
* @param Request $request
* @param string $route
* @param string $message
* @param array $routeParams
* @return JsonResponse|RedirectResponse
*/ */
protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []) protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []): JsonResponse|RedirectResponse
{ {
if ($request->expectsJson()) { if ($request->expectsJson()) {
return $this->successResponse([], $message); return $this->successResponse([], $message);
@ -106,15 +78,11 @@ class BaseController extends Controller
/** /**
* Handle unauthorized access responses. * Handle unauthorized access responses.
*
* @param Request $request
* @param string $message
* @return JsonResponse|RedirectResponse
*/ */
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized') protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized'): JsonResponse|RedirectResponse
{ {
if ($request->expectsJson()) { if ($request->expectsJson()) {
return $this->errorResponse($message, 403); return $this->errorResponse($message, HttpStatus::FORBIDDEN);
} }
return redirect()->route('login')->with('error', $message); return redirect()->route('login')->with('error', $message);
@ -122,17 +90,13 @@ class BaseController extends Controller
/** /**
* Handle not found (404) responses. * Handle not found (404) responses.
*
* @param Request $request
* @param string $message
* @return JsonResponse|\Illuminate\View\View
*/ */
protected function notFoundResponse(Request $request, string $message = 'Not Found') protected function notFoundResponse(Request $request, string $message = 'Not Found')
{ {
if ($request->expectsJson()) { if ($request->expectsJson()) {
return $this->errorResponse($message, 404); return $this->errorResponse($message, HttpStatus::NOT_FOUND);
} }
return response()->view('errors.404', ['message' => $message], 404); return response()->view('errors.404', ['message' => $message], HttpStatus::NOT_FOUND);
} }
} }

Loading…
Cancel
Save