HasFormResponse.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. protected $currentUrl;
  10. /**
  11. * Get ajax response.
  12. *
  13. * @param $message
  14. * @param null $redirect
  15. * @param bool $status
  16. * @param array $options
  17. *
  18. * @return bool|\Illuminate\Http\JsonResponse
  19. */
  20. public function ajaxResponse(
  21. ?string $message,
  22. ?string $redirect = null,
  23. bool $status = true,
  24. array $options = []
  25. ) {
  26. $location = $options['location'] ?? false;
  27. $urlKey = $location ? 'location' : 'redirect';
  28. return response()->json([
  29. 'status' => $status,
  30. 'message' => $message,
  31. $urlKey => $redirect ? admin_url($redirect) : '',
  32. ]);
  33. }
  34. /**
  35. * Send a location redirect response.
  36. *
  37. * @param string|null $message
  38. * @param string|null $url
  39. * @param bool $status
  40. *
  41. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  42. */
  43. public function location($url = null, $options = [])
  44. {
  45. if (is_string($options)) {
  46. $options = ['message' => $options];
  47. }
  48. $options['location'] = true;
  49. return $this->redirect($url, $options);
  50. }
  51. /**
  52. * @param string $message
  53. * @param string $redirectTo
  54. *
  55. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  56. */
  57. public function success($message = null, $redirectTo = null)
  58. {
  59. $redirectTo = $redirectTo ?: $this->getCurrentUrl();
  60. return $this->redirect($redirectTo, [
  61. 'message' => $message,
  62. 'status' => true,
  63. 'status_code' => 200,
  64. ]);
  65. }
  66. /**
  67. * 设置当前URL.
  68. *
  69. * @param string $url
  70. *
  71. * @return $this
  72. */
  73. public function setCurrentUrl($url)
  74. {
  75. $this->currentUrl = admin_url($url);
  76. return $this;
  77. }
  78. /**
  79. * @param Request|null $request
  80. *
  81. * @return string
  82. */
  83. protected function getCurrentUrl(Request $request = null)
  84. {
  85. if ($this->currentUrl) {
  86. return admin_url($this->currentUrl);
  87. }
  88. /* @var Request $request */
  89. $request = $request ?: (empty($this->request) ? request() : $this->request);
  90. if ($current = $request->get(static::CURRENT_URL_NAME)) {
  91. return admin_url($current);
  92. }
  93. $query = $request->query();
  94. if (method_exists($this, 'sanitize')) {
  95. $query = $this->sanitize($query);
  96. }
  97. return url($request->path().'?'.http_build_query($query));
  98. }
  99. /**
  100. * @param string $message
  101. * @param string $redirectTo
  102. * @param int $statusCode
  103. *
  104. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  105. */
  106. public function error($message = null, $redirectTo = null, int $statusCode = 200)
  107. {
  108. if (! $redirectTo) {
  109. return $this->ajaxResponse($message, null, false);
  110. }
  111. return $this->redirect($redirectTo, [
  112. 'message' => $message,
  113. 'status' => false,
  114. 'status_code' => $statusCode,
  115. ]);
  116. }
  117. /**
  118. * Get redirect response.
  119. *
  120. * @param string|array $url
  121. * @param array|string $options
  122. *
  123. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  124. */
  125. public function redirect($url = null, $options = null)
  126. {
  127. if (is_array($url)) {
  128. $options = $url;
  129. $url = null;
  130. }
  131. if (is_string($options)) {
  132. $message = $options;
  133. $options = [];
  134. } else {
  135. $message = $options['message'] ?? null;
  136. }
  137. $status = (bool) ($options['status'] ?? true);
  138. $message = $message ?: trans('admin.save_succeeded');
  139. return $this->ajaxResponse($message, $url, $status, $options);
  140. }
  141. /**
  142. * @param string|null $url
  143. * @param array|string $options
  144. *
  145. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
  146. */
  147. public function redirectToIntended(?string $url, $options = null)
  148. {
  149. $path = session()->pull('url.intended');
  150. return $this->redirect($path ?: $url, $options);
  151. }
  152. /**
  153. * @param array|MessageBag|\Illuminate\Validation\Validator $validationMessages
  154. *
  155. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
  156. */
  157. public function validationErrorsResponse($validationMessages)
  158. {
  159. if ($validationMessages instanceof Validator) {
  160. $validationMessages = $validationMessages->getMessageBag();
  161. }
  162. return response()->json([
  163. 'errors' => is_array($validationMessages) ? $validationMessages : $validationMessages->getMessages(),
  164. ], 422);
  165. }
  166. }