Laravel 5.4:在__construct()中登录用户ID

时间:2017-03-31 05:54:18

标签: php laravel laravel-5 laravel-5.4

我正在尝试访问构造函数中的public function __construct(){ $this->middleware('auth'); $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get(); View::share('ind_status',$induction_status); } ,但它总是返回错误尝试获取非对象的属性。我在laravel文档中研究了Session在构造函数中是不可访问的,并且也在SO上搜索。我需要在构造函数中登录用户ID,因为我必须从数据库中获取数据并使其可用于其所有方法。我目前的代码是:

validatePassword

有没有办法(简单方法)在构造函数中登录用户ID。

我将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:7)

在视图中共享变量 AppServiceProvider 是一种很好的方法

转到 App \ Providers \ AppServiceProvider.php

在页面顶部包含外观

use Illuminate\Support\Facades\Auth;

use App\TrainingStatusRecord;

并在启动方法

中粘贴代码
view()->composer('*', function($view){
        if(Auth::user()){
            $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get();
            View::share('induction_status',$induction_status);
        }
    });

现在,您可以在应用中获取变量$induction_status

参考 https://laravel.com/docs/5.4/providers#the-boot-method

希望它会对你有所帮助。

答案 1 :(得分:1)

要解决这个问题+----+----+ | c0 | c1 | +----+----+ | 5 | 3 | +----+----+ 确实是我的第一个猜测。这将主要起作用,但访问App\Providers\AppServiceProvider数据除外。

因此,如果您尝试在 AppServiceProvider 启动方法中访问Session数据,您将获得Session。所以要做到这一点,它在任何情况下都能很好地工作null是一个不错的选择。您可以将共享变量的逻辑写入所有您想要的视图。只需创建一个Middleware并将其包含在middlewareroute中。

答案 2 :(得分:0)

试试这个:

public function __construct(){
    $this->middleware(function ($request, $next) {
        $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get();
    }
    View::share('induction_status',$induction_status);
}