如何在Laravel控制器上设置全局变量



每个人。

控制器上的每个函数,我都使用相同的变量。

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();
...
}

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

我该如何设置?

感谢

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

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

另一个答案:在laravel 中为整个控制器分配用户值

基本上是重复的。

此解决方案适用于我

在中

app/Http/Controllers/Controller.php

导入照明\支持\立面\授权

namespace AppHttpControllers;
use IlluminateFoundationAuthAccessAuthorizesRequests;
use IlluminateFoundationBusDispatchesJobs;
use IlluminateFoundationValidationValidatesRequests;
use IlluminateRoutingController as BaseController;
use IlluminateSupportFacadesAuth; <--- 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"
}
}

现在$this->userId$this->userName在任何扩展Controller 的地方都可用

例如:

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

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

最新更新