Laravel 5 将数据共享到laravel5.2中的所有视图

Laravel 5 将数据共享到laravel5.2中的所有视图,laravel-5,laravel-5.2,Laravel 5,Laravel 5.2,我有以下问题,我想共享一个数组给我的项目中的所有视图,所以我遵循了文档,它工作得很好,但是我想在服务提供者引导函数中获得经过身份验证的用户,并且它总是返回null? 有什么建议吗 这是我的密码 namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any applicati

我有以下问题,我想共享一个数组给我的项目中的所有视图,所以我遵循了文档,它工作得很好,但是我想在服务提供者引导函数中获得经过身份验证的用户,并且它总是返回null? 有什么建议吗

这是我的密码
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider 
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public $myusers;

  public function boot()
  {
     $origLat=\Auth::user()->lat;
     $origLon=\Auth::user()->lng;
     $dist=5;
     $lon1=$origLon-$dist/cos(deg2rad($origLat))*73.2044736;
     $lon2=$origLon+$dist/cos(deg2rad($origLat));
     $lat1=$origLat-($dist/73.2044763);
     $lat2=$origLat+($dist/73.2044763);

     $id=\Auth::user()->id;                            
     $pictures=User::find($id)->pictures;
     $this->myusers = DB::table('users')->select(

            DB::raw("*,
                        3956 * 2 * 
              ASIN(SQRT( POWER(SIN(($origLat- lat)*pi()/180/2),2)
              +COS($origLat*pi()/180 )*COS(lat*pi()/180)
              *POWER(SIN(($origLon-lng)*pi()/180/2),2)))*1.609344 
              as distance"
              ))    
                    ->where('users.id', '!=', \Auth::user()->id)
                    ->whereBetween('lng',[$lon1,$lon2])
                    ->whereBetween('lat',[$lat1,$lat2])
                    ->having("distance", "<", "$dist")
                    ->orderBy("distance") 
                    ->get();

                view()->share('myusers', $this->myusers);
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

不幸的是,此时Laravel应用程序请求生命周期的工作方式是,当执行App\Providers\AppServiceProvider类的引导方法时,会话尚未初始化,因为这是在引导方法之后执行的中间件中完成的

由于身份验证系统需要会话才能获得经过身份验证的用户,因此在您的特定情况下,您无法在那里成功使用view->share,尽管这是推荐的方法。相反,您可以在中间件中使用另一种方法。以下是实现此功能所需的步骤:

一,。通过运行以下命令,创建一个中间件类,我们称之为LoadUsers:

php artisan make:中间件LoadUsers 二,。这将在app/Http/Middleware/LoadUsers.php中生成一个类。现在,您只需要将代码从AppServiceProvider移动到中间件的handle方法:

类LoadUsers { 公共函数handle$request,Closure$next { //共享所有视图数据的代码位于此处 返回$next$请求; } } 三,。接下来,您需要向App\Http\Kernel类注册中间件。如果要将中间件应用于使用该中间件的所有路由,或创建特定的组或路由中间件,可以从$routeMiddleware将其添加到web组。所以,如果您想将其添加到web,请执行以下操作:

受保护的$middlewareGroups=[ “网络”=>[ ... //请确保将此行添加到 //此列表中的StartSession中间件 \App\Http\Middleware\LoadUsers::class, ], ... ];
现在,对于依赖于Auth::user的所有视图,您都应该拥有适当的共享数据。

我已经共享了上面的代码。有什么建议吗?返回null的是什么?Auth::user->id?您是否尝试过Request::user->id,尝试过var转储Auth::user,您得到了什么?在将其发送到视图之前,您可能应该添加一个检查以查看它们是否经过身份验证。我已经尝试了所有这些,但它始终返回空值。谢谢,你太棒了。