如何在 Laravel Controller 上设置全局变量?

How to set the global variable on Laravel 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 function signedPdf(request $request) 
{
   $user = auth()->user();
   $user_name = $user->name;
   $user_id = $user->id;
   $name = $user_name . $user_id . '.' . $file->extension();
   ...
}

我想为公共变量设置全局变量

如何设置?

谢谢

通常您可以直接在构造函数中设置内容,但控制器在中间件方面存在问题。在请求通过中间件堆栈之前解析控制器。这意味着您通常还没有可用的会话或身份验证之类的东西。您可能希望在 Controller 的构造函数中使用基于闭包的中间件来设置此值:

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

另一个答案:

基本上是重复的。

这个解决方案对我有用

app/Http/Controllers/Controller.php

导入Illuminate\Support\Facades\Auth

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Auth; <--- like this

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $userId;
    protected $userName;

    public function __construct()
    {
        $this->userId = Auth::user()->id;
        $this->userName = Auth::user()->name; <--- "Admin"

    }
}

Now $this->userId and $this->userName is available wherever extends Controller

例如:

app/Http/Controllers/API/v1/ConfigController.php

 class ConfigController extends Controller
 {

   public function index() {
       return $this->userName; <--- "Admin"
   }