HasFormResponse.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace Dcat\Admin\Traits;
  3. use Dcat\Admin\Support\Helper;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\MessageBag;
  6. use Illuminate\Validation\Validator;
  7. trait HasFormResponse
  8. {
  9. /**
  10. * Get ajax response.
  11. *
  12. * @param $message
  13. * @param null $redirect
  14. * @param bool $status
  15. *
  16. * @return bool|\Illuminate\Http\JsonResponse
  17. */
  18. public function ajaxResponse(?string $message, ?string $redirect = null, bool $status = true)
  19. {
  20. if ($this->isAjaxRequest()) {
  21. return response()->json([
  22. 'status' => $status,
  23. 'message' => $message,
  24. 'redirect' => $redirect ? admin_url($redirect) : '',
  25. ]);
  26. }
  27. return false;
  28. }
  29. /**
  30. * @param Request $request
  31. *
  32. * @return bool
  33. */
  34. public function isAjaxRequest(Request $request = null)
  35. {
  36. return Helper::isAjaxRequest($request);
  37. }
  38. /**
  39. * @param string $message
  40. * @param string $redirectTo
  41. *
  42. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  43. */
  44. public function success($message = null, $redirectTo = null)
  45. {
  46. $redirectTo = $redirectTo ?: $this->getCurrentUrl();
  47. return $this->redirect($redirectTo, [
  48. 'message' => $message,
  49. 'status' => true,
  50. 'status_code' => 200,
  51. ]);
  52. }
  53. /**
  54. * @param Request|null $request
  55. *
  56. * @return string
  57. */
  58. protected function getCurrentUrl(Request $request = null)
  59. {
  60. /* @var Request $request */
  61. $request = $request ?: (empty($this->request) ? request() : $this->request);
  62. if ($current = $request->get('_current_')) {
  63. return url($current);
  64. }
  65. $query = $request->query();
  66. if (method_exists($this, 'sanitize')) {
  67. $query = $this->sanitize($query);
  68. }
  69. return url($request->path().'?'.http_build_query($query));
  70. }
  71. /**
  72. * @param string $message
  73. * @param string $redirectTo
  74. * @param int $statusCode
  75. *
  76. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  77. */
  78. public function error($message = null, $redirectTo = null, int $statusCode = 200)
  79. {
  80. if (! $redirectTo) {
  81. if (! $this->isAjaxRequest()) {
  82. admin_toastr($message, 'error');
  83. return back()->withInput();
  84. }
  85. return $this->ajaxResponse($message, null, false);
  86. }
  87. return $this->redirect($redirectTo, [
  88. 'message' => $message,
  89. 'status' => false,
  90. 'status_code' => $statusCode,
  91. ]);
  92. }
  93. /**
  94. * Get redirect response.
  95. *
  96. * @param string $url
  97. * @param array|string $options
  98. *
  99. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  100. */
  101. public function redirect(?string $url, $options = null)
  102. {
  103. if (is_string($options)) {
  104. $message = $options;
  105. $options = [];
  106. } else {
  107. $message = $options['message'] ?? null;
  108. }
  109. $status = (bool) ($options['status'] ?? true);
  110. if ($this->isAjaxRequest()) {
  111. $message = $message ?: trans('admin.save_succeeded');
  112. return $this->ajaxResponse($message, $url, $status);
  113. }
  114. $status = (int) ($options['status_code'] ?? 302);
  115. if ($message) {
  116. admin_toastr($message);
  117. }
  118. return redirect(admin_url($url), $status);
  119. }
  120. /**
  121. * @param string|null $url
  122. * @param array|string $options
  123. *
  124. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  125. */
  126. public function redirectToIntended(?string $url, $options = null)
  127. {
  128. $path = session()->pull('url.intended');
  129. return $this->redirect($path ?: $url, $options);
  130. }
  131. /**
  132. * @param array|MessageBag|\Illuminate\Validation\Validator $validationMessages
  133. *
  134. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
  135. */
  136. public function validationErrorsResponse($validationMessages)
  137. {
  138. if ($validationMessages instanceof Validator) {
  139. $validationMessages = $validationMessages->getMessageBag();
  140. }
  141. if (! static::isAjaxRequest()) {
  142. return back()->withInput()->withErrors($validationMessages);
  143. }
  144. return response()->json([
  145. 'errors' => is_array($validationMessages) ? $validationMessages : $validationMessages->getMessages(),
  146. ], 422);
  147. }
  148. }