【问题标题】:Declare a variable to be used in all methods Laravel声明一个变量用于所有方法 Laravel
【发布时间】:2018-07-10 09:47:12
【问题描述】:

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

示例..我想替换: 验证::用户() 经过: $this->用户

最好的方法是什么?

【问题讨论】:

标签: laravel


【解决方案1】:

对于 Laravel 5.3.4+

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

protected $user;

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您尝试在Controller.php__construct 方法中设置用户,您会发现它不起作用

    这行不通:

    public function __construct()
    {
        $this->user = auth()->check() ? auth()->user() : null;
    }
    

    根据框架的创建者 Taylor 的说法,这是设计使然。他不鼓励将您的用户设置在基本控制器中 - 但是,您要如何做事取决于您。有办法解决这个问题。如果您希望在每个控制器中都可以访问 $this->user,您可以将其添加到您的 Controller.php 文件中:

    protected function setUser()
    {
        $this->user = auth()->check() ? auth()->user() : null;
    }
    

    然后在你的__construct 方法中调用它:

    public function __construct()
    {
        $this->setUser();
    }
    

    现在,您可以从任何控制器方法访问this->user。如果未设置,它将是 null,但如果您使用 Laravel 的标准身份验证保护,那么未经身份验证的用户通过时应该不会有太大问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多