refactor: BackUrl::selfWithoutBack 统一 selfWithoutBack 构造并修复 currentQuery 依赖
This commit is contained in:
@@ -133,4 +133,21 @@ class BackUrl
|
|||||||
|
|
||||||
return $path . '?' . \Illuminate\Support\Arr::query($q);
|
return $path . '?' . \Illuminate\Support\Arr::query($q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成当前页面去掉 back 后的 selfWithoutBack(站内相对路径)。
|
||||||
|
* 用于:生成返回来源 back 或防止 back 嵌套膨胀。
|
||||||
|
*/
|
||||||
|
public static function selfWithoutBack(): string
|
||||||
|
{
|
||||||
|
$currentQuery = request()->query();
|
||||||
|
unset($currentQuery['back']);
|
||||||
|
|
||||||
|
$url = '/' . ltrim(request()->path(), '/');
|
||||||
|
if (count($currentQuery) > 0) {
|
||||||
|
$url .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,7 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
@php
|
@php
|
||||||
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
||||||
$currentQuery = request()->query();
|
$selfWithoutBack = \App\Support\BackUrl::selfWithoutBack();
|
||||||
unset($currentQuery['back']);
|
|
||||||
$selfWithoutBack = '/' . ltrim(request()->path(), '/');
|
|
||||||
if (count($currentQuery) > 0) {
|
|
||||||
$selfWithoutBack .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 用于构建“从套餐页跳转到订阅/订单页后可返回套餐页”的链接
|
// 用于构建“从套餐页跳转到订阅/订单页后可返回套餐页”的链接
|
||||||
$makeSubscriptionUrl = function (array $query) use ($selfWithoutBack) {
|
$makeSubscriptionUrl = function (array $query) use ($selfWithoutBack) {
|
||||||
|
|||||||
@@ -17,12 +17,7 @@
|
|||||||
: '';
|
: '';
|
||||||
|
|
||||||
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
||||||
$currentQuery = request()->query();
|
$selfWithoutBack = \App\Support\BackUrl::selfWithoutBack();
|
||||||
unset($currentQuery['back']);
|
|
||||||
$selfWithoutBack = '/' . ltrim(request()->path(), '/');
|
|
||||||
if (count($currentQuery) > 0) {
|
|
||||||
$selfWithoutBack .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 从线索直达“创建平台订单”入口:预填 plan_id/remark,并带 back 回到当前线索列表(保留筛选)
|
// 从线索直达“创建平台订单”入口:预填 plan_id/remark,并带 back 回到当前线索列表(保留筛选)
|
||||||
// 备注:如果线索 meta 中包含 merchant_id,也会一并预填(用于“已存在站点,但需补单/续费”的场景)
|
// 备注:如果线索 meta 中包含 merchant_id,也会一并预填(用于“已存在站点,但需补单/续费”的场景)
|
||||||
|
|||||||
@@ -10,12 +10,10 @@
|
|||||||
$SYNC_FAILED_REASON_TRUNCATE_LEN = (int) config('saasshop.platform_orders.sync_failed_reason_display_truncate_len', 60);
|
$SYNC_FAILED_REASON_TRUNCATE_LEN = (int) config('saasshop.platform_orders.sync_failed_reason_display_truncate_len', 60);
|
||||||
|
|
||||||
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
||||||
|
$selfWithoutBack = \App\Support\BackUrl::selfWithoutBack();
|
||||||
|
|
||||||
$currentQuery = request()->query();
|
$currentQuery = request()->query();
|
||||||
unset($currentQuery['back']);
|
unset($currentQuery['back']);
|
||||||
$selfWithoutBack = '/' . ltrim(request()->path(), '/');
|
|
||||||
if (count($currentQuery) > 0) {
|
|
||||||
$selfWithoutBack .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
// back 安全护栏(全页通用):
|
// back 安全护栏(全页通用):
|
||||||
// - 仅允许站内相对路径(/ 开头)
|
// - 仅允许站内相对路径(/ 开头)
|
||||||
|
|||||||
@@ -7,12 +7,10 @@
|
|||||||
@php
|
@php
|
||||||
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
||||||
// 注意:使用相对路径而非绝对 URL,避免不同 APP_URL 环境影响,以及 show 页 back 安全校验(要求以 / 开头)
|
// 注意:使用相对路径而非绝对 URL,避免不同 APP_URL 环境影响,以及 show 页 back 安全校验(要求以 / 开头)
|
||||||
|
$selfWithoutBack = \App\Support\BackUrl::selfWithoutBack();
|
||||||
|
|
||||||
$currentQuery = request()->query();
|
$currentQuery = request()->query();
|
||||||
unset($currentQuery['back']);
|
unset($currentQuery['back']);
|
||||||
$selfWithoutBack = '/' . ltrim(request()->path(), '/');
|
|
||||||
if (count($currentQuery) > 0) {
|
|
||||||
$selfWithoutBack .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
|
||||||
}
|
|
||||||
$back = $selfWithoutBack;
|
$back = $selfWithoutBack;
|
||||||
|
|
||||||
// 用于构建“保留当前筛选上下文”的站内跳转链接(且不透传 back,避免嵌套/污染)
|
// 用于构建“保留当前筛选上下文”的站内跳转链接(且不透传 back,避免嵌套/污染)
|
||||||
|
|||||||
@@ -11,12 +11,7 @@
|
|||||||
$platformOrdersBaseUrl = '/admin/platform-orders';
|
$platformOrdersBaseUrl = '/admin/platform-orders';
|
||||||
|
|
||||||
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
// back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀)
|
||||||
$currentQuery = request()->query();
|
$selfWithoutBack = \App\Support\BackUrl::selfWithoutBack();
|
||||||
unset($currentQuery['back']);
|
|
||||||
$selfWithoutBack = '/' . ltrim(request()->path(), '/');
|
|
||||||
if (count($currentQuery) > 0) {
|
|
||||||
$selfWithoutBack .= '?' . \Illuminate\Support\Arr::query($currentQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
$makePlatformOrderUrl = function (array $query) use ($platformOrdersBaseUrl, $selfWithoutBack) {
|
$makePlatformOrderUrl = function (array $query) use ($platformOrdersBaseUrl, $selfWithoutBack) {
|
||||||
// 若调用方显式传了 back,则不覆盖;否则默认回到当前订阅详情页(剔除 back,避免嵌套)
|
// 若调用方显式传了 back,则不覆盖;否则默认回到当前订阅详情页(剔除 back,避免嵌套)
|
||||||
|
|||||||
Reference in New Issue
Block a user