You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

102 lines
3.2 KiB

<?php
namespace App\Http\Controllers;
use App\Enums\HttpStatus;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as LaravelController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class BaseController extends LaravelController
{
use AuthorizesRequests, ValidatesRequests;
/**
* Return a standardized success JSON response for API requests.
*/
protected function successResponse($data = null, string $message = 'Success', int $code = HttpStatus::OK): JsonResponse
{
return response()->json([
'status' => 'success',
'message' => $message,
'data' => $data,
], $code);
}
/**
* Return a standardized error JSON response for API requests.
*/
protected function errorResponse(string $message = 'Error', int $code = HttpStatus::BAD_REQUEST, array $errors = []): JsonResponse
{
return response()->json([
'status' => 'error',
'message' => $message,
'errors' => $errors,
], $code);
}
/**
* Automatically respond with JSON or Web view based on request type.
*/
protected function respond(Request $request, $data = null, string $message = 'Success', int $code = HttpStatus::OK)
{
if ($request->expectsJson()) {
return $this->successResponse($data, $message, $code);
}
return view('response.success', compact('data', 'message'));
}
/**
* Automatically handle error response for Web or API.
*/
protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = HttpStatus::BAD_REQUEST)
{
if ($request->expectsJson()) {
return $this->errorResponse($message, $code, $errors);
}
return redirect()->back()
->withErrors($errors)
->withInput();
}
/**
* Redirect the response to a route or return success JSON for API.
*/
protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []): JsonResponse|RedirectResponse
{
if ($request->expectsJson()) {
return $this->successResponse([], $message);
}
return redirect()->route($route, $routeParams)->with('success', $message);
}
/**
* Handle unauthorized access responses.
*/
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized'): JsonResponse|RedirectResponse
{
if ($request->expectsJson()) {
return $this->errorResponse($message, HttpStatus::FORBIDDEN);
}
return redirect()->route('login')->with('error', $message);
}
/**
* Handle not found (404) responses.
*/
protected function notFoundResponse(Request $request, string $message = 'Not Found')
{
if ($request->expectsJson()) {
return $this->errorResponse($message, HttpStatus::NOT_FOUND);
}
return response()->view('errors.404', ['message' => $message], HttpStatus::NOT_FOUND);
}
}