Controller.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\JsonResponse;
  6. use Illuminate\Http\Resources\Json\JsonResource;
  7. use Illuminate\Routing\Controller as BaseController;
  8. class Controller extends BaseController
  9. {
  10. use AuthorizesRequests, ValidatesRequests;
  11. /**
  12. * 成功响应
  13. */
  14. protected function ok(mixed $data = null, string $message = ''): JsonResponse
  15. {
  16. return response()->json([
  17. 'ok' => true,
  18. 'data' => $data,
  19. 'message' => $message,
  20. ], 200, [], JSON_UNESCAPED_UNICODE);
  21. }
  22. /**
  23. * 错误响应
  24. */
  25. protected function error(
  26. string $message,
  27. mixed $data = null,
  28. int $status = 400
  29. ): JsonResponse {
  30. return response()->json([
  31. 'ok' => false,
  32. 'data' => $data,
  33. 'message' => $message,
  34. ], $status, [], JSON_UNESCAPED_UNICODE);
  35. }
  36. /*
  37. |--------------------------------------------------------------------------
  38. | v3 不需要任何响应 helper
  39. |--------------------------------------------------------------------------
  40. |
  41. | 成功:直接 return Resource。JsonResource 默认就包 data,paginator 交给
  42. | 框架算分页,形状是 {data: {...}} 与 {data: [...], meta: {...}}。
  43. |
  44. | return ChannelV3Resource::make($channel);
  45. | return ChannelV3Resource::collection($query->paginate($n));
  46. |
  47. | 失败:抛异常。abort()/ValidationException/BusinessException,
  48. | 由 bootstrap/app.php 统一渲染成 RFC 9457 Problem Details。
  49. |
  50. | 上面 ok()/error() 只给 v2 用,v3 控制器里不准出现。
  51. |
  52. */
  53. }