Laravel 5 将数据共享到laravel5.2中的所有视图
我有以下问题,我想共享一个数组给我的项目中的所有视图,所以我遵循了文档,它工作得很好,但是我想在服务提供者引导函数中获得经过身份验证的用户,并且它总是返回null? 有什么建议吗 这是我的密码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
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,您得到了什么?在将其发送到视图之前,您可能应该添加一个检查以查看它们是否经过身份验证。我已经尝试了所有这些,但它始终返回空值。谢谢,你太棒了。