Laravel 5.4 : Get logged in user id inside __construct()

后端 未结 3 1737
有刺的猬
有刺的猬 2020-12-03 23:59

I am trying to access Auth::user()->id; inside constructor but it always return the error Trying to get property of non-object. I study in t

相关标签:
3条回答
  • 2020-12-04 00:19

    To solve this problem App\Providers\AppServiceProvider was indeed my first guess. This would work mostly but with an exception to access Session data.

    So If you try to access Session data within boot method of AppServiceProvider you will get null. So to do this so it works perfectly good in any case Middleware is a good option. You can write this logic of sharing a variable to all your desired views. Just create a middleware and include that in your route or routegroup .

    0 讨论(0)
  • 2020-12-04 00:30

    To share a variable in view AppServiceProvider is a good approach

    Go to App\Providers\AppServiceProvider.php

    Include facade on top of the page

    use Illuminate\Support\Facades\Auth;
    
    use App\TrainingStatusRecord;
    

    and paste below code in boot method

    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);
            }
        });
    

    Now you will be able to get your variable $induction_status in your app.

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

    Hope it will help you.

    0 讨论(0)
  • 2020-12-04 00:30

    Try this:

    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);
    }
    
    0 讨论(0)
提交回复
热议问题