From 842eeb3e39d9750faf0e27ed7cb4de9ded282388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Tue, 17 Mar 2026 04:20:17 +0800 Subject: [PATCH] refactor(backurl): add mergeQueryToCurrentPath for safe self links --- app/Support/BackUrl.php | 26 +++++++++++++++++++ .../admin/site_subscriptions/index.blade.php | 19 +++----------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/Support/BackUrl.php b/app/Support/BackUrl.php index a96ab75..c8e5831 100644 --- a/app/Support/BackUrl.php +++ b/app/Support/BackUrl.php @@ -95,6 +95,32 @@ class BackUrl return $url; } + /** + * 合并 query 到当前 path(不自动处理 back),用于“保留筛选上下文但不透传 back”的场景。 + * + * @param array $baseQuery 例如 request()->query() 并移除 back 后的数组 + * @param array $overrides 覆盖字段(null 表示删除) + */ + public static function mergeQueryToCurrentPath(array $baseQuery, array $overrides = []): string + { + $q = $baseQuery; + + foreach ($overrides as $k => $v) { + if ($v === null) { + unset($q[$k]); + } else { + $q[$k] = $v; + } + } + + $url = '/' . ltrim(request()->path(), '/'); + if (count($q) > 0) { + $url .= '?' . \Illuminate\Support\Arr::query($q); + } + + return $url; + } + /** * 给指定站内相对路径附加安全 back(若 back 为空则原样返回)。 * diff --git a/resources/views/admin/site_subscriptions/index.blade.php b/resources/views/admin/site_subscriptions/index.blade.php index 87f5b03..ef10718 100644 --- a/resources/views/admin/site_subscriptions/index.blade.php +++ b/resources/views/admin/site_subscriptions/index.blade.php @@ -13,23 +13,10 @@ unset($currentQuery['back']); $back = $selfWithoutBack; - // 用于构建“保留当前筛选上下文”的站内跳转链接(且不透传 back,避免嵌套/污染) + // 用于构建“保留当前筛选上下文”的站内跳转链接:统一抽到 BackUrl,避免 Blade 内闭包口径漂移。 + // 说明:这里不透传 back(避免嵌套/污染)。 $buildSelfUrl = function (array $overrides = []) use ($currentQuery) { - $q = $currentQuery; - foreach ($overrides as $k => $v) { - if ($v === null) { - unset($q[$k]); - } else { - $q[$k] = $v; - } - } - - $url = '/' . ltrim(request()->path(), '/'); - if (count($q) > 0) { - $url .= '?' . \Illuminate\Support\Arr::query($q); - } - - return $url; + return \App\Support\BackUrl::mergeQueryToCurrentPath($currentQuery, $overrides); }; // back 安全护栏(全页通用):