parent
f7ad1f4c0a
commit
2bcc5769bd
2 changed files with 150 additions and 6 deletions
@ -0,0 +1,138 @@ |
||||
<?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); |
||||
} |
||||
} |
Loading…
Reference in new issue