如何在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为什么他们不想使用它,而不是我