声明要在所有方法Laravel中使用的变量

时间:2018-07-09 22:39:43

标签: laravel

声明要在控制器和模型中的所有方法中使用的变量的最佳方法是什么:

示例..我要替换: Auth :: user() 通过: $ this-> user

最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

对于Laravel 5.3.4 +

在控制器中声明属性,然后可以在其__construct方法中这样做:

protected $user;

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->user = Auth::user();

        return $next($request);
    });
}

对于以下版本,您只能在$this->user = Auth::user();__construct

参考:https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

答案 1 :(得分:0)

如果您尝试通过Controller.php的{​​{1}}方法设置用户,您会发现它不起作用

这行不通:

__construct

根据框架的创建者Taylor的说法,这是设计使然。他不鼓励在基本控制器中设置您的用户-但是,这取决于您如何执行操作。有一种解决方法。如果希望在每个控制器中都可以访问public function __construct() { $this->user = auth()->check() ? auth()->user() : null; } ,则可以将其添加到$this->user文件中:

Controller.php

然后在您的protected function setUser() { $this->user = auth()->check() ? auth()->user() : null; } 方法中调用它:

__construct

现在,您可以从任何控制器方法访问public function __construct() { $this->setUser(); } 。如果未设置,它将为this->user,但是如果您使用的是Laravel的标准身份验证防护,则未经身份验证的用户可以轻松通过它。