我将一些数据存储在中间件中,如下所示:
public function handle($request, Closure $next)
{
//checking above..
if($this->authed()){
$request->token= $token; //here store the token in user request
return $next($request);
}
return response('Invalid credentials', 401);
}
然后在控制器中,我调用一个自定义请求类
//function in controller
public function upload(CoverageValueRequest $request){ //calling a custom request
dd($request->token);
dd($request->all());
}
第一个dd将为null。但是,如果我将CoverageValueRequest
更改为Request
,它将打印令牌。
p.S:来自REST调用的$request数据为JSON格式,使用Content-Type:application/JSON。我不确定这是否相关。
更新
我在中间件中改变了以下仍然相同的行为:
$request->merge(['token' => $token]);
如果是CoverageValueRequest
,则无法获得令牌,但如果是Request
,则可以工作。
我通过将token设置为请求的属性找到了答案,中间件类:
public function handle($request, Closure $next)
{
//checking above..
if($this->authed()){
$request->attributes->add(['token' => $token]);
return $next($request);
}
return response('Invalid credentials', 401);
}
然后在控制器中检索如下:
//function in controller
public function upload(CoverageValueRequest $request){ //calling a custom request
dd($request->attributes->get('token'));
dd($request->all());
}
我不知道为什么直接分配或merge
的奇怪行为不起作用。希望有人能澄清。