如何在Laravel控制器上设置全局变量?
各位 控制器上的每个函数都使用相同的变量如何在Laravel控制器上设置全局变量?,laravel,model-view-controller,controller,Laravel,Model View Controller,Controller,各位 控制器上的每个函数都使用相同的变量 public function store(Request $request) { $user = auth()->user(); $user_name = $user->name; $user_id = $user->id; $init_pdf = url('/') . '/images/' . 'upload/' . $user_name . '/' . $name; ... } public fu
public function store(Request $request)
{
$user = auth()->user();
$user_name = $user->name;
$user_id = $user->id;
$init_pdf = url('/') . '/images/' . 'upload/' . $user_name . '/' . $name;
...
}
public function signedPdf(request $request)
{
$user = auth()->user();
$user_name = $user->name;
$user_id = $user->id;
$name = $user_name . $user_id . '.' . $file->extension();
...
}
我想为公共变量设置全局变量
public function store(Request $request)
{
$user = auth()->user();
$user_name = $user->name;
$user_id = $user->id;
$init_pdf = url('/') . '/images/' . 'upload/' . $user_name . '/' . $name;
...
}
public function signedPdf(request $request)
{
$user = auth()->user();
$user_name = $user->name;
$user_id = $user->id;
$name = $user_name . $user_id . '.' . $file->extension();
...
}
我如何设置它
谢谢通常,您可以直接在构造函数中设置内容,但在中间件方面,控制器存在问题。在请求通过中间件堆栈之前解析控制器。这意味着您通常还没有可用的会话或身份验证。您希望在控制器的构造函数中使用基于闭包的中间件来设置此值:
protected $user;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = $request->user();
// also can set other variables here as well
// let the request continue through the stack
return $next($request);
});
}
然后您应该可以在方法中访问$this->user
另一个答案是:
基本上是重复的。为什么要将用户的名称和id存储在不同的变量中?为什么不在需要它们的地方直接使用
$user->name
&$user->id
?我没有存储这些变量,我将在另一个角色上使用它。仍然没有解释为什么要为它们设置其他变量?是否再次分配$user
变量?即使如此,它也没有解释任何事情。这与使用request()
helper和获取用户有什么不同?在什么方面有什么不同<代码>请求()请求::
$request
等都将是同一个实例。。。无论您如何获取用户(可以使用Auth::user()
,Auth()->user()
),关键是在中间件堆栈运行之后,您才可以访问会话,而不是整个堆栈,它只是在Auth使用会话解析用户之前需要运行的StartSession
;但是,该中间件是middleware的web
组的一部分。您为什么不在方法中使用Request
实例,而不是在构造函数中添加$this->中间件(…
)?无论您身在何处,您都可以访问您的请求。这不是“我的方法”这是OP的…他们希望用户和其他变量作为控制器类的属性(我对控制器的“全局变量”的解释)…问OP为什么他们不想使用它,而不是我