Browse Source

修复表单提交跳转异常bug

jqh 5 years ago
parent
commit
307ca837c2
3 changed files with 43 additions and 2 deletions
  1. 1 1
      src/Form/Builder.php
  2. 24 1
      src/Middleware/Bootstrap.php
  3. 18 0
      src/Support/Helper.php

+ 1 - 1
src/Form/Builder.php

@@ -682,7 +682,7 @@ class Builder
      */
     protected function addRedirectUrlField()
     {
-        $previous = URL::previous();
+        $previous = Helper::getPreviousUrl();
 
         if (! $previous || $previous == URL::current()) {
             return;

+ 24 - 1
src/Middleware/Bootstrap.php

@@ -3,7 +3,9 @@
 namespace Dcat\Admin\Middleware;
 
 use Dcat\Admin\Admin;
+use Dcat\Admin\Support\Helper;
 use Illuminate\Http\Request;
+use Illuminate\Session\Store;
 
 class Bootstrap
 {
@@ -13,7 +15,11 @@ class Bootstrap
         $this->setupScript();
         $this->fireEvents();
 
-        return $next($request);
+        $response = $next($request);
+
+        $this->storeCurrentUrl($request);
+
+        return $response;
     }
 
     protected function includeBootstrapFile()
@@ -35,4 +41,21 @@ class Bootstrap
 
         Admin::callBooted();
     }
+
+    /**
+     * @param  \Illuminate\Http\Request
+     *
+     * @return void
+     */
+    protected function storeCurrentUrl(Request $request)
+    {
+        if (
+            $request->method() === 'GET'
+            && $request->route()
+            && ! Helper::isAjaxRequest()
+            && ! $request->prefetch()
+        ) {
+           Helper::setPreviousUrl($request->fullUrl());
+        }
+    }
 }

+ 18 - 0
src/Support/Helper.php

@@ -578,4 +578,22 @@ class Helper
     {
         return mb_strpos(mb_strtolower($_SERVER['HTTP_USER_AGENT'] ?? ''), 'qqbrowser') !== false;
     }
+
+    /**
+     * @param string $url
+     *
+     * @return void
+     */
+    public static function setPreviousUrl($url)
+    {
+        session()->flash('admin.prev.url', static::urlWithoutQuery((string) $url, '_pjax'));
+    }
+
+    /**
+     * @return string
+     */
+    public static function getPreviousUrl()
+    {
+        return url(session()->get('admin.prev.url')) ?: url()->previous();
+    }
 }