Alexander Musikhin 2 месяцев назад
Родитель
Сommit
50b04e65b8
3 измененных файлов с 43 добавлено и 4 удалено
  1. 37 0
      app/Http/Middleware/TrackLastWebPageMiddleware.php
  2. 2 0
      bootstrap/app.php
  3. 4 4
      routes/web.php

+ 37 - 0
app/Http/Middleware/TrackLastWebPageMiddleware.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Http\Request;
+use Symfony\Component\HttpFoundation\Response;
+
+class TrackLastWebPageMiddleware
+{
+    public function handle(Request $request, Closure $next): Response
+    {
+        $response = $next($request);
+
+        if (!$request->isMethod('GET')) {
+            return $response;
+        }
+
+        if ($request->ajax() || $request->expectsJson() || $request->wantsJson()) {
+            return $response;
+        }
+
+        if ($request->routeIs('set-year')) {
+            return $response;
+        }
+
+        $contentType = (string) $response->headers->get('Content-Type');
+        if (!str_contains($contentType, 'text/html')) {
+            return $response;
+        }
+
+        session(['last_web_url' => $request->fullUrl()]);
+
+        return $response;
+    }
+}
+

+ 2 - 0
bootstrap/app.php

@@ -2,6 +2,7 @@
 
 use App\Http\Middleware\CatchTokenFcmMiddleware;
 use App\Http\Middleware\EnsureUserHasRole;
+use App\Http\Middleware\TrackLastWebPageMiddleware;
 use Illuminate\Foundation\Application;
 use Illuminate\Foundation\Configuration\Exceptions;
 use Illuminate\Foundation\Configuration\Middleware;
@@ -17,6 +18,7 @@ return Application::configure(basePath: dirname(__DIR__))
         $middleware->alias([
             'role' => EnsureUserHasRole::class,
         ]);
+        $middleware->append(TrackLastWebPageMiddleware::class);
         $middleware->append(CatchTokenFcmMiddleware::class);
     })
     ->withExceptions(function (Exceptions $exceptions) {

+ 4 - 4
routes/web.php

@@ -50,14 +50,14 @@ Route::middleware('auth:web')->group(function () {
             session(['year' => $request->year]);
         }
 
-        $previousUrl = url()->previous();
+        $targetUrl = session('last_web_url');
         $currentUrl = $request->fullUrl();
 
-        $previousHost = parse_url($previousUrl, PHP_URL_HOST);
+        $targetHost = parse_url((string) $targetUrl, PHP_URL_HOST);
         $currentHost = $request->getHost();
 
-        if (!empty($previousUrl) && $previousUrl !== $currentUrl && (!$previousHost || $previousHost === $currentHost)) {
-            return redirect()->to($previousUrl);
+        if (!empty($targetUrl) && $targetUrl !== $currentUrl && (!$targetHost || $targetHost === $currentHost)) {
+            return redirect()->to($targetUrl);
         }
 
         return redirect()->route('order.index');