如何在多个laravel控制器中传递与Auth相关的变量?

时间:2019-08-01 05:40:56

标签: laravel variables methods controller multiple-views

我的laravel控制器中有如下所示的多种方法:

public function daily(){
    $sites = Site::all()->where('owner_id', '==', Auth::user()->owner_id);
        return view('backend.daily',compact('sites'));
}
public function weekly(){
    $sites = Site::all()->where('owner_id', '==', Auth::user()->owner_id);
        return view('backend.weekly',compact('sites'));
}
public function yearly(){
    $sites = Site::all()->where('owner_id', '==', Auth::user()->owner_id);
        return view('backend.yearly',compact('sites'));
}
...

我在控制器构造函数中使用了它:

public function __construct() {
        $sites = Site::all()->where('owner_id', '==', Auth::user()->owner_id);
        View::share('sites', $sites);
}

并在boot()方法中的AppserviceProvider中使用,但这不起作用并出现以下错误:

"Trying to get property 'owner_id' of non-object"

正常使用时没有错误!

在每种方法中,我都使用了一个名为$ sites的变量,但在多个视图中使用了该变量,我想一次使用$ sites,而我的代码也希望这样简短一些:

public function daily(){
        return view('backend.daily',compact('sites'));
}
public function weekly(){
        return view('backend.weekly',compact('sites'));
}
public function yearly(){
        return view('backend.yearly',compact('sites'));
}
...

我该如何实现?

1 个答案:

答案 0 :(得分:0)

尝试一下:

optional(Auth::user())->owner_id

如果用户未登录,则可能无法从数据库中获取网站。