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