feat: plan store/update respect back redirect

This commit is contained in:
萝卜
2026-03-13 21:55:02 +00:00
parent 91c6921362
commit 8cd258f204
3 changed files with 29 additions and 2 deletions

View File

@@ -160,8 +160,16 @@ class PlanController extends Controller
$this->ensurePlatformAdmin($request); $this->ensurePlatformAdmin($request);
$data = $this->validatePlan($request); $data = $this->validatePlan($request);
$back = (string) $request->input('back', '');
$safeBack = str_starts_with($back, '/') ? $back : '';
$plan = Plan::query()->create($data); $plan = Plan::query()->create($data);
if ($safeBack !== '') {
return redirect($safeBack)->with('success', '套餐已创建:' . $plan->name);
}
return redirect('/admin/plans')->with('success', '套餐已创建:' . $plan->name); return redirect('/admin/plans')->with('success', '套餐已创建:' . $plan->name);
} }
@@ -207,8 +215,16 @@ class PlanController extends Controller
$this->ensurePlatformAdmin($request); $this->ensurePlatformAdmin($request);
$data = $this->validatePlan($request, $plan->id); $data = $this->validatePlan($request, $plan->id);
$back = (string) $request->input('back', '');
$safeBack = str_starts_with($back, '/') ? $back : '';
$plan->update($data); $plan->update($data);
if ($safeBack !== '') {
return redirect($safeBack)->with('success', '套餐已更新:' . $plan->name);
}
return redirect('/admin/plans')->with('success', '套餐已更新:' . $plan->name); return redirect('/admin/plans')->with('success', '套餐已更新:' . $plan->name);
} }

View File

@@ -12,6 +12,11 @@
<form method="post" action="{{ $formAction }}" class="card form-grid"> <form method="post" action="{{ $formAction }}" class="card form-grid">
@csrf @csrf
@php $back = (string) ($back ?? ''); @endphp
@if($back !== '')
<input type="hidden" name="back" value="{{ $back }}">
@endif
<label> <label>
<span>套餐名称</span> <span>套餐名称</span>
<input name="name" value="{{ old('name', $plan->name) }}" required> <input name="name" value="{{ old('name', $plan->name) }}" required>

View File

@@ -91,6 +91,8 @@ class AdminPlanTest extends TestCase
->assertSee('新建套餐') ->assertSee('新建套餐')
->assertSee('套餐名称'); ->assertSee('套餐名称');
$back = '/admin/plans?status=active&billing_cycle=monthly';
$this->post('/admin/plans', [ $this->post('/admin/plans', [
'code' => 'pro_monthly_form', 'code' => 'pro_monthly_form',
'name' => '专业版(月付)', 'name' => '专业版(月付)',
@@ -101,7 +103,8 @@ class AdminPlanTest extends TestCase
'sort' => 5, 'sort' => 5,
'description' => '主要面向成长型站点', 'description' => '主要面向成长型站点',
'published_at' => now()->format('Y-m-d H:i:s'), 'published_at' => now()->format('Y-m-d H:i:s'),
])->assertRedirect('/admin/plans'); 'back' => $back,
])->assertRedirect($back);
$this->get('/admin/plans') $this->get('/admin/plans')
->assertSee('专业版(月付)') ->assertSee('专业版(月付)')
@@ -126,6 +129,8 @@ class AdminPlanTest extends TestCase
->assertOk() ->assertOk()
->assertSee('编辑套餐'); ->assertSee('编辑套餐');
$back = '/admin/plans?published=unpublished';
$this->post('/admin/plans/' . $plan->id, [ $this->post('/admin/plans/' . $plan->id, [
'code' => 'update_test', 'code' => 'update_test',
'name' => '更新后套餐', 'name' => '更新后套餐',
@@ -135,7 +140,8 @@ class AdminPlanTest extends TestCase
'status' => 'active', 'status' => 'active',
'sort' => 10, 'sort' => 10,
'description' => '通过编辑表单更新', 'description' => '通过编辑表单更新',
])->assertRedirect('/admin/plans'); 'back' => $back,
])->assertRedirect($back);
$this->get('/admin/plans') $this->get('/admin/plans')
->assertSee('更新后套餐') ->assertSee('更新后套餐')