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.
 
 
 
 
 
 

138 lines
4.0 KiB

<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class BaseController extends Controller
{
use AuthorizesRequests, ValidatesRequests;
/**
* 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
{
return response()->json([
'status' => 'success',
'message' => $message,
'data' => $data,
], $code);
}
/**
* 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
{
return response()->json([
'status' => 'error',
'message' => $message,
'errors' => $errors,
], $code);
}
/**
* 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)
{
if ($request->expectsJson()) {
return $this->successResponse($data, $message, $code);
}
// You can customize the view as needed.
return view('response.success', compact('data', 'message'));
}
/**
* 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)
{
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.
*
* @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 = [])
{
if ($request->expectsJson()) {
return $this->successResponse([], $message);
}
return redirect()->route($route, $routeParams)->with('success', $message);
}
/**
* Handle unauthorized access responses.
*
* @param Request $request
* @param string $message
* @return JsonResponse|RedirectResponse
*/
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized')
{
if ($request->expectsJson()) {
return $this->errorResponse($message, 403);
}
return redirect()->route('login')->with('error', $message);
}
/**
* 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')
{
if ($request->expectsJson()) {
return $this->errorResponse($message, 404);
}
return response()->view('errors.404', ['message' => $message], 404);
}
}