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
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);
|
|
}
|
|
}
|
|
|