声明要在控制器和模型中的所有方法中使用的变量的最佳方法是什么:
示例..我要替换: Auth :: user() 通过: $ this-> user
最好的方法是什么?
答案 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的标准身份验证防护,则未经身份验证的用户可以轻松通过它。