我正在尝试访问构造函数中的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。
我将不胜感激。
谢谢
答案 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
并将其包含在middleware
或route
中。
答案 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);
}