【发布时间】: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 都会返回 NULL:https://XYZ/middleware_test_user_project_change/1/1
既然我已经正确设置了中间件和路由参数(最后是 GET 变量),为什么我不能在我的中间件中使用它们作为请求输入?
【问题讨论】:
-
在中间件中尝试
request('projet_id') -
它有效,但为什么呢?我在这里没有找到包含
request->的任何代码示例:laravel.com/docs/8.x/requests#accessing-the-request + laravel.com/docs/8.x/middleware -
> request 函数返回当前请求实例或从当前请求中获取输入字段的值: 那么如果它等价于
$request->input('foobar');,为什么后者不起作用?
标签: laravel laravel-routing laravel-middleware laravel-request