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