php Laravel 10中的空请求参数

utugiqy6  于 2024-01-05  发布在  PHP
关注(0)|答案(2)|浏览(207)

我在Laravel 10中的项目有一个奇怪的问题。我的$request在我的控制器中是空的。

控制器

  1. public function postSettings(Request $request){
  2. $user = $request->user();
  3. $request = $request->validate([
  4. 'scroll_lock' => 'boolean',
  5. 'test_mode' => 'boolean',
  6. ]);
  7. $settings = Settings::find($user->id) ? Settings::where('user_id', $user->id)->first() : new Settings();
  8. $settings->scroll_lock = $request['scroll_lock'];
  9. $settings->test_mode = $request['test_mode'];
  10. $settings->save();
  11. return route('get-settings');
  12. }

字符串

中间件

  1. public function handle(Request $request, Closure $next): Response
  2. {
  3. $user = Auth::user();
  4. if( $user->user_type == UserType::Manager || $user->user_type == UserType::Operator ) {
  5. return redirect(RouteServiceProvider::QUESTIONS);
  6. }
  7. else {
  8. return $next( $request );
  9. }

形式

  1. <form method="post" action="{{ route('post-settings') }}">
  2. @csrf
  3. <div id="" class="my-4">
  4. <div class="activity card" style="--delay: .2s">
  5. <div class="row">
  6. <h2 class="question-title text-justify">Settings</h2>
  7. </div>
  8. <div class="answers-container h-100">
  9. <div class="align-content-center">
  10. <div class="m-3 row">
  11. <div class="col-6">
  12. <div class="form-check form-switch">
  13. <input class="form-check-input" type="checkbox" name="scroll-lock" role="switch" id="flexSwitchCheckChecked" @if($dataview->settings->scroll_lock)value="1" checked @else value="0" @endif>
  14. <label class="form-check-label" for="flexSwitchCheckChecked">Disabilita blocco scroll nel questionario.</label>
  15. </div>
  16. </div>
  17. <div class="col-6">
  18. <div class="form-check form-switch">
  19. <input class="form-check-input" type="checkbox" name="test-mode" role="switch" id="flexSwitchCheckChecked" @if($dataview->settings->test_mode)value="1" checked @else value="0" @endif>
  20. <label class="form-check-label" for="flexSwitchCheckChecked">Abilita la modalità di test</label>
  21. <p>Invio email disabilitato, questionario ridotto.</p>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="my-3 row">
  26. <div class="col-2">
  27. <button type="submit" class="btn btn-primary btn-md next">Save</button>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </form>

路线

  1. Route::get('/settings', [DashboardController::class, 'getSettings'] )->middleware(['auth', 'verified', 'switchUserType'])->name('get-settings');
  2. Route::post('/settings', [DashboardController::class, 'postSettings'] )->middleware(['auth', 'verified', 'switchUserType'])->name('post-settings');


请求类是use Illuminate\Http\Request;我已经用dd($request)和Xdebug进行了双重检查,但都带有空参数。

6qfn3psc

6qfn3psc1#

这个问题可能是因为你在验证后重新分配了$request变量。validate方法只返回经过验证的数据,所以当你执行$request = $request->validate([...])时,你只使用经过验证的数据替换了整个请求对象。
尝试将您的代码更改为:

  1. public function postSettings(Request $request){
  2. $user = $request->user();
  3. $validated = $request->validate([
  4. 'scroll_lock' => 'boolean',
  5. 'test_mode' => 'boolean',
  6. ]);
  7. $settings = Settings::find($user->id) ? Settings::where('user_id', $user->id)->first() : new Settings();
  8. $settings->scroll_lock = $validated['scroll_lock'];
  9. $settings->test_mode = $validated['test_mode'];
  10. $settings->save();
  11. return route('get-settings');
  12. }

字符串
在这段代码中,经过验证的数据存储在一个单独的变量$validated中,原始的$request对象保持不变。这应该可以解决您的问题。

展开查看全部
cuxqih21

cuxqih212#

为了避免重复原始的$request,请将验证过的数据分配给不同的变量。下面是更正后的代码:

  1. $validatedData = $request->validate([
  2. 'scroll_lock' => 'Boolean',
  3. 'test_mode' => 'Boolean',
  4. ]);

字符串

相关问题