Laravel 8: 无法在中间件的请求输入中访问 GET 参数

Laravel 8: GET params can't be accessed in Middleware's Request's inputs

我在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);
    }

}

但是,$projet_id$pro_id return NULL 当我访问以下 URL 时: https://XYZ/middleware_test_user_project_change/1/1

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

路由参数不属于'inputs'。它们是不同的东西;这就是为什么当您使用 $request->all().

获得所有输入时看不到它们的原因

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

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