【问题标题】:how to define global variable for laravel controller class within its contructor如何在其构造函数中为 laravel 控制器类定义全局变量
【发布时间】:2017-06-13 01:33:31
【问题描述】:

我想在这里为变量$user_detail 分配一些值,从数据库中获取以在整个控制器类中使用,例如用户的详细信息。它的 Laravel 5.3

private $user_detail;
public function __construct(){
    $this->user_detail=User::find(Auth::id());
}
public function index(){
    return $post_data=$this->user_detail;
}

从上面的代码我得到一个空白屏幕。 我怎样才能做到这一点,或者有更好的方法吗?请建议。 谢谢

【问题讨论】:

  • $this->user_detail = auth()->user(); 或根本不从 construct 定义它并在需要的地方使用auth()->user()

标签: php laravel controller laravel-5.3


【解决方案1】:

您正在尝试获取当前经过身份验证的用户并将其传递到某个地方。但问题是 Laravel 已经为您做到了,您可以使用 auth()->user() 对象从应用程序的任何部分访问经过身份验证的用户:

{{ auth()->user()->name }}
{{ auth()->user()->email }}

【讨论】:

  • 太棒了!还有一个查询,假设如果我有另一个相关的表,我将如何使用 auth() 获取它,例如目前的代码看起来像 'User::with('hospital')->find(Auth::id( ));'用户属于医院
  • @GauravRai 在这种情况下使用lazy eager loading,如auth()->user()->load('hospital')
【解决方案2】:

您返回一个初始化,这就是您看到空白页的原因。您应该做的是初始化变量并在之后返回变量。您的代码将如下所示。

public function index() {
    $post_data = $this->user_detail
    return $post_data;
}

这将首先初始化您的变量,然后您返回该变量。

但就像@alexeymezenin 所说,您已经可以使用auth()->user() 在应用程序中的任何地方获取登录用户对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多