【问题标题】:Laravel 8: GET params can't be accessed in Middleware's Request's inputsLaravel 8:在中间件的请求输入中无法访问 GET 参数
【发布时间】:2021-03-21 18:46:52
【问题描述】:

我已经在web.php路由文件中定义了这条路由:

Route::get('/middleware_test_user_project_change/{pro_id}/{projet_id}', function ($pro_id, $projet_id) {
    return 'test';
})->middleware('user.project.change');

我在中间件中定义了这个 handle 函数(我已经通过以下条目将其添加到内核中:'user.project.change' => \App\Http\Middleware\CheckUserProposition::class):

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\User;

class CheckUserProposition
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $projet_id = $request->input('projet_id');
        $pro_id = $request->input('pro_id');
        return $next($request);
    }

}

但是,当我访问以下 URL 时,$projet_id$pro_id 都会返回 NULLhttps://XYZ/middleware_test_user_project_change/1/1

既然我已经正确设置了中间件和路由参数(最后是 GET 变量),为什么我不能在我的中间件中使用它们作为请求输入?

【问题讨论】:

标签: laravel laravel-routing laravel-middleware laravel-request


【解决方案1】:

路由参数不是“输入”的一部分。它们是分开的;这就是为什么当您使用$request-&gt;all() 获取所有输入时看不到它们的原因。

如果你想要一个路由参数,你应该明确要求它:

$request->route('projet_id');
$request->route()->parameter('projet_id');

【讨论】:

  • 什么是输入?文档没有说清楚
  • 请求的负载和查询字符串是“inputs”
猜你喜欢
  • 1970-01-01
  • 2019-12-30
  • 2021-03-11
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多