我正在为我的资源控制器使用中间件,在中间件中我设置了一些全局变量。现在我想在我的控制器的构造函数中访问这些变量,但是当我尝试在构造函数中访问这些变量时,我得到null值,而如果我在该控制器的任何其他方法中访问它们,我将收到非null值。我正在使用Laravel 5.6。以下是它的代码。
控制器:
class PhaseController extends ApiController
{
public function __construct(Request $request)
{
parent::__construct();
$this->middleware('myMiddleware');
$myVar = $request->myVar;
}
}
中间件:
class myMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$explodedPath = explode("/",$request->path());
$request["myVar1"] = $explodedPath[5];
//Code here
return $next($request);
}
}
这是因为在调用中间件之前接收到请求对象,所以即使我在中间件中修改请求对象,Constructor仍然使用旧的请求对象状态。在这里,我需要刷新请求对象以获取其新状态。但我不知道怎么做。
提前致谢。
答案 0 :(得分:0)
尝试将其添加到请求ParameterBag:
public function handle($request, Closure $next)
{
$parts = explode('/', $request->path());
$request->attributes->add(['myVar1' => data_get($parts, 5)]);
// Code here
return $next($request);
}
然后在你的控制器中:
$myVar = $request->get('myVar1');
编辑:
如果您需要控制器中的路径参数,为什么不使用
$request->route()->parameters();
或
$request->route('parameter_name'); // where name is based on the name in your route definition.